如何使用电子构建器

时间:2018-01-20 22:35:01

标签: electron electron-builder

我制作了一个电子应用程序,它是第三方CLI工具的GUI,幸运的是,当我运行electron .

时,它在开发模式下工作正常

在主要流程中,我的应用程序使用节点s3-download-client/bin/s3-download-client运行脚本child_process.spawn()并且工作正常,因为我知道CLI工具的路径。它在src/main/index.js中定义为:

const DOWNLOAD_CLIENT = path.resolve(__dirname, '..', '..', 's3-download-client/bin/s3-download-client');

但是,我不知道如何配置electron-builder以在我构建的应用中包含该外部工具并使其协同工作。

这是我的项目结构:

.
├── package.json
├── s3-download-client
│   ├── bin
│   │   └── s3-download-client
└── src
│   ├── main
│   │   ├── index.js
│   │   └── someLib.js
│   └── renderer
│       ├── app.js
│       ├── controllers
│       ├── index.html
│       └── templates

我的package.json

{
  "name": "logs-explorer",
  "version": "1.0.0",
  "description": "",
  "main": "src/main/index.js",
  "scripts": {
    "pack": "electron-builder --dir",
    "dist": "electron-builder",
    "postinstall": "electron-builder install-app-deps"
  },
  "build": {
    "appId": "your.id",
    "mac": {
      "category": "your.app.category.type"
    }
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "angular": "^1.6.8",
    "angular-eonasdan-datetimepicker": "^0.3.9",
    "angular-route": "^1.6.8",
    "bootstrap": "^3.3.7",
    "eonasdan-bootstrap-datetimepicker": "^4.17.47",
    "jquery": "^3.3.0",
    "moment": "^2.20.1",
    "open": "0.0.5",
    "opn": "^5.2.0",
    "tempy": "^0.2.1"
  },
  "devDependencies": {
    "electron": "^1.7.10",
    "electron-builder": "^19.54.0"
  }
}

我想我可能需要以另一种方式在我的代码中定义CLI工具的路径,并在electron-builder's中添加一些额外的package.json配置,但我找不到它应该是什么样子。

1 个答案:

答案 0 :(得分:0)

嗯,解决方案很简单。我必须定义files属性,其中包含我想要包含在构建的应用程序中的资源的路径。我没有必要在我的应用代码中更改任何路径。不幸的是,我不得不使用asar: false标志,因为默认true值我的应用无效。可能它可以用某种方式用asarUnpack属性修复,但我没有成功。

以下是electron-builder的{​​{1}}配置:

package.json

不需要在 "build": { "appId": "your.id", "mac": { "category": "your.app.category.type" }, "files": [ "s3-download-client/**/*", "src/**/*" ], "asar": false } 中包含node_modules,但当然您必须指定所有其他目录。