【问题标题】:Include a folder and the files inside it to electron build using electron-builder?包含一个文件夹和其中的文件以使用电子构建器进行电子构建?
【发布时间】:2018-10-16 01:25:45
【问题描述】:

我在 Electron 项目的工作目录中名为 data 的目录中有一些 JSON 文件。我使用electron-build 使用以下配置(package.json)成功构建了应用程序。

{
  "name": "My App",
  "version": "0.0.9",
  "description": "TEST DESC",
  "main": "main.js",
  "scripts": {
    "start": "electron .",
    "pack": "build --dir",
    "dist": "build"
  }
  "author": "Test",
  "license": "CC0-1.0",
  "build": {
    "appId": "test.tester.test",
    "directories": {
      "app": ""
    },
    "extraFiles": [
      "data"
    ],
    "dmg": {
      "contents": [
        {
          "x": 110,
          "y": 150
        },
        {
          "x": 240,
          "y": 150,
          "type": "link",
          "path": "/Applications"
        }
      ]
    },
    "win": {
      "target": "squirrel",
      "icon": "build/icon.ico"
    }
  },
  "devDependencies": {
    "electron": "~1.7.8",
    "electron-builder": "^20.11.1"
  },
  "dependencies": {
    "electron-settings": "^3.1.4",
    "jquery": "^3.3.1",
    "leveldown": "^3.0.0",
    "mkdirp": "^0.5.1",
    "shelljs": "^0.8.1"
  }
}

我想 data 目录没有被添加到构建文件中。因为我使用 data 目录中的文件来呈现应用程序中的视图,这在构建的应用程序中不起作用。请提出解决方案。

我在应用程序中使用这些 JSON 文件,如下所示:

fs.readFile('./data/userdata.json', 'utf8', function readFileCallback(err, data) {      
    if(data == '') { data = '[]'; }
    var users = JSON.parse(data);

    //Render Code
});

【问题讨论】:

  • 顺便说一句,您可以通过查看安装目录来查看它是否被包含在内:/Users/username/AppData/Local/Programs/appname/resources/app。这就是它在 Windows 上的位置,虽然我不确定它在 mac 或 linux 上的位置
  • 这些文件是只读的还是你编辑那些 json 文件(如果只读你可以把它们留在 asar 中)?您的 extraFiles 属性看起来有点奇怪。你的数组应该包含这种类型的对象:{ from: 'sourcePattern', to: 'targetPattern'}
  • 试试 app.getAppPath() 和 app.getPath 方法。 electronjs.org/docs/api/app#appgetapppath

标签: javascript node.js electron electron-builder


【解决方案1】:
"build": {
    "extraResources": [
        {
            "from": "data",
            "to": "data"
        }
    ]
}

像这样添加后,Electron-builder 会在打包应用后将数据文件夹复制到应用的resource/data。这样您就可以使用 这个。

const dataPath =
  process.env.NODE_ENV === 'development'
    ? path.join(__dirname, '../../data')
    : path.join(process.resourcesPath, 'data');

fs.readFile(path.join(dataPath,'userdata.json', 'utf8', function readFileCallback(err, data) {      
  if(data == '') { data = '[]'; }
  var users = JSON.parse(data);

  //Render Code
});

【讨论】:

  • 有什么方法可以将文件夹放在主目录中(即project/data)而不是放在资源目录中(即project/resources/data)?
  • 其实我想通了,我可以把它改成"to": "../projects"。你知道..在Linux和MacOS上是否也向上遍历??
猜你喜欢
  • 2017-01-23
  • 2020-08-31
  • 2017-12-14
  • 1970-01-01
  • 2020-05-14
  • 2012-09-16
  • 2010-11-20
  • 2020-10-20
  • 2016-12-10
相关资源
最近更新 更多