我正在构建一个电子应用程序,我已经创建了一个用Go编写的小守护程序二进制文件,它将作为extraResource与应用程序一起打包。但是,根据平台的不同,需要打包此二进制文件的不同版本,特别是不带MacOS扩展名的Windows和agent的agent.exe,以及与Mac相同的文件名。
我在项目根目录下的bin目录中有以下二进制文件:
├── bin/
│ ├── windows/
│ │ └── agent.exe
│ ├── mac/
│ │ └── agent
│ ├── linux/
│ │ └── agent在测试Windows时,我包含了bin/windows目录,它工作得很好(包可以像预期的那样在资源目录中执行)
下面是我的package.json的相关片段
"build": {
"win": {
"icon": "build/app.ico",
"target": [
{
"target": "nsis",
"arch": [
"x64"
]
}
]
},
"nsis": {
"include": "build/installer.nsh",
"oneClick": false,
"allowToChangeInstallationDirectory": true,
"license": "build/eula.txt",
"installerIcon": "build/app.ico",
"artifactName": "...",
"shortcutName": "..."
},
"extraResources": [
"bin/windows/agent.exe"
]
}有可能做到这一点吗?就像现在一样,我必须通过在不同的平台构建之间更改extraResources值来编辑package.json文件,这出于显而易见的原因是不理想的(因为我可能忘记了,并且由于忘记更改回来而最终包含了错误的二进制文件)。
请注意,我不支持32位Windows,因此所有Windows版本都将包含相同的(64位)二进制文件。
我用的是电子生成器19.50.0
发布于 2020-07-13 12:08:22
向build目录添加三个新目录:win、mac和linux,与上面的示例文件夹结构一样(将windows更改为win),并将所有特定于平台的二进制文件(以及需要随发行版打包的任何其他文件)添加到各自的目录中。
然后将以下内容添加到package.json的build部分
"extraResources": [
{
"from": "bin/${os}",
"to": "bin",
"filter": [
"**/*"
]
}
]打包后,这些文件将被添加到资源根目录的bin目录中,因此以下文件和目录将出现在resources目录中。在我的例子中,对于在dist/win-unpacked/resources中构建的windows包(相对于项目根目录)
app.asar.unpacked/
bin/
app.asar
electron.asar
elevate.exe这样,在目标系统上安装应用程序后,即可使用process.resourcesPath在运行时访问该应用程序
const binaryFileName = process.platform == 'win32' ? 'binfile.exe' : 'binfile';
const binaryFile = path.join(process.resourcesPath, `bin/${binaryFileName}`);
...
spawn(binaryFile, [...args]);在堆栈溢出上向此post致敬。
https://stackoverflow.com/questions/62829863
复制相似问题