【已解决】Electron Forge构建时包名中有中文报错
使用Electron Forge打包时,构建出来的安装包,以及安装后的软件名(启动程序/快捷方式)默认取的是package.json中的name
或productName
,其中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目前还未关闭,等待更新吧。