我制作了一个电子应用程序,它是第三方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
配置,但我找不到它应该是什么样子。
答案 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
,但当然您必须指定所有其他目录。