【已解决】Electron Forge构建时包名中有中文报错

2,020 阅读2分钟

【已解决】Electron Forge构建时包名中有中文报错

使用Electron Forge打包时,构建出来的安装包,以及安装后的软件名(启动程序/快捷方式)默认取的是package.json中的nameproductName ,其中name 是不允许有中文的,可以通过改productName 来达到目的。

// package.json
{
  "name": "en name",
  "productName": "你软件的中文名",
...
}

执行打包npm run make ,这时候可能报下面的错。

An unhandled rejection has occurred inside Forge:
Error: Compilation errors in the preload (main_window): assets by status 0 bytes [cached] 1 asset

ERROR in main
Module not found: Error: Can't resolve './src/preload.js' in 'D:\workspace\electron\fast-clip\main'
resolve './src/preload.js' in 'D:\workspace\electron\fast-clip\main'
  using description file: D:\workspace\electron\fast-clip\main\package.json (relative path: .)
    using description file: D:\workspace\electron\fast-clip\main\package.json (relative path: ./src/preload.js)
      no extension
        D:\workspace\electron\fast-clip\main\src\preload.js doesn't exist
      .js
        D:\workspace\electron\fast-clip\main\src\preload.js.js doesn't exist
      .json
        D:\workspace\electron\fast-clip\main\src\preload.js.json doesn't exist
      .wasm
        D:\workspace\electron\fast-clip\main\src\preload.js.wasm doesn't exist
      as directory
        D:\workspace\electron\fast-clip\main\src\preload.js doesn't exist

webpack 5.78.0 compiled with 1 error in 104 ms
at WebpackPlugin.compileRenderers (D:\workspace\electron\fast-clip\main\node_modules\@electron-forge\plugin-webpack\dist\WebpackPlugin.js:186:31)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async D:\workspace\electron\fast-clip\main\node_modules\@electron-forge\plugin-webpack\dist\WebpackPlugin.js:276:21
    at async Task.task (D:\workspace\electron\fast-clip\main\node_modules\@electron-forge\core\dist\util\plugin-interface.js:77:37)
    at async Task.run (D:\workspace\electron\fast-clip\main\node_modules\listr2\dist\index.cjs:978:11)
    at async D:\workspace\electron\fast-clip\main\node_modules\p-map\index.js:57:22

原因是在forge.config.js中指定了安装包的图标。如下setupIcon 属性:

const path = require('path')
module.exports = {
 ...
  makers: [{
    name: '@electron-forge/maker-squirrel',
    config: {
      // An URL to an ICO file to use as the application icon (displayed in Control Panel > Programs and Features).
      iconUrl: path.join(__dirname, './asset/icon.ico'),
      // The ICO file to use as the icon for the generated Setup.exe
      setupIcon: path.join(__dirname, './asset/icon.ico'), // <-- 这一行指定了安装包的图标
    },
  },
  ...
}

不知道是不是Electron Forge本身的bug,指定中文名和setupIcon 不能同时使用。**要么放弃指定中文名,要么放弃自定义安装包图标。**如有知道细节的,或有解决办法的希望可以在下面留言,谢谢。

【2023-10-25 更新】确定这是一个Bug,作者关于这个Bug的Issues目前还未关闭,等待更新吧。