【问题标题】:Packaging different binaries per platform for Electron为 Electron 每个平台打包不同的二进制文件
【发布时间】:2020-10-30 22:25:09
【问题描述】:

我正在构建一个 Electron 应用程序,并创建了一个用 Go 编写的小型守护程序二进制文件,它将与应用程序一起打包为 extraResource。但是,根据平台的不同,需要打包此二进制文件的不同版本,具体而言,agent.exe 用于 Windows,agent 用于 MacOS,而对于 Linux,文件名与 Mac 相同。

我的项目根目录的bin 目录中有这些二进制文件:

├── bin/
│   ├── windows/
│   │   └── agent.exe
│   ├── mac/
│   │   └── agent
│   ├── linux/
│   │   └── agent

测试 Windows,我包含了 bin/windows 目录,它工作正常(资源目录中的 exe 包如预期的那样)

这是我的 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

【问题讨论】:

    标签: javascript electron electron-builder


    【解决方案1】:

    将三个新目录添加到您的build 目录:winmaclinux,就像我上面的示例文件夹结构一样(将windows 更改为win),并添加所有平台-特定的二进制文件(以及任何其他需要与发行版一起打包的文件)到它们各自的目录中。

    然后将以下内容添加到package.jsonbuild 部分:

    "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 在 Stack Overflow 上。

    【讨论】:

      猜你喜欢
      • 2021-05-10
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      • 2015-02-11
      • 2021-06-01
      • 2012-08-27
      • 1970-01-01
      相关资源
      最近更新 更多