通过 electron-forge electronPackagerConfig 设置平台依赖图标

Setting platform dependant icon via electron-forge electronPackagerConfig

使用 electron-forge 构建桌面应用程序。该应用程序是为 OSX 和 Windows 构建的。在我的 package.json 里面,我有:

"electronPackagerConfig": {
    "icon": "src/images/icon/app_icon_osx.icns"
}

当我在 Windows 上构建时,我必须手动将 package.json 中的图标从 "app_icon_osx.icns" 更改为 "app_icon_win.ico"。

如果我尝试对两个平台都使用 "app_icon.png",图标不会在 OSX 上显示,并且构建失败并在 Windows 上显示 "rcedit.exe failed with exit code 1. Fatal error: Unable to set icon"。

我在项目的一个文件夹中有所有 3 个版本的图标(icns、ico、png)。因为我正在使用 electron-forge,所以我似乎无法使用 electron packager 的 --icon 参数。

有没有一种方法可以传递图标以用作命令行参数,而不是硬编码在 package.json 中?或者我可以为两个平台使用相同的 png 的方法?

该扩展是为每个平台自动添加的。只需像这样为每个平台提供一个图标:app_icon.icnsapp_icon.ico、...

然后更新您的配置:

"electronPackagerConfig": {
    "icon": "src/images/icon/app_icon"
}

已接受的答案适用于 macOS 和 Windows,但对于 Linux,您必须执行如下操作:

在制作器中设置应用图标(仅适用于应用列表):

    {
      name: "@electron-forge/maker-deb",
      config: {
        options: {
          icon: "./src/images/icon.png",
        },
      },
    },

创建一个资产文件夹(或任何东西)并在构建期间使用 webpack.main.config.js 中的 copy-webpack-plugin 复制它:

const CopyPlugin = require("copy-webpack-plugin");

module.exports = {
  // ...
  plugins: [new CopyPlugin([{ from: "./assets", to: "assets" }])],
};

您现在可以从主进程访问此文件夹中的任何文件,因此在创建 BrowserWindow 时参考图标 here

mainWindow = new BrowserWindow({
    // ...
    icon: path.join(__dirname, "assets/icon.png"),
  });

forge.config.js中,执行:

const path = require('path')

module.exports = {
  packagerConfig: {
    icon: path.join(__dirname, 'favicon'),
  },
}

重要提示:

  1. If the file extension is omitted, it is auto-completed to the correct extension based on the platform, including when platform: 'all' is in effect.

  2. 此设置在 运行 宁 electron-forge start 时不更改图标。

  3. 如果设置正确,还是看不到正确的图标,可能是图标缓存问题。
    如果在 Windows 10 上,运行 ie4uinit -show 在命令行中将显示最新的图标。