使用electron-packager打包Angular5+Electron项目为Windows应用遇fsevents错误求助
嘿,这个问题我之前帮好几个做Angular+Electron项目的开发者解决过,咱们先搞清楚为啥会出现这个错误,再一步步解决:
fsevents是仅适用于macOS系统的可选依赖包,专门用来做高效的文件系统监听。当你在Windows或者Linux环境下安装项目依赖时,npm/yarn会自动跳过它的安装(因为它被标记为optionalDependencies)。但electron-packager在打包过程中,会扫描node_modules里的所有目录和文件,当它走到@angular-devkit/core/node_modules/chokidar这个路径时,发现代码里引用了fsevents,但这个包实际没安装在当前环境,就抛出了“无法定位模块”的错误。
这里有几个靠谱的解决思路,你可以按顺序尝试:
清理依赖并重新安装
先把现有的依赖目录和锁文件删掉,确保依赖安装的状态是干净的:rm -rf node_modules package-lock.json yarn.lock npm install # 或者用 yarn install 如果你用yarn的话这一步能确保npm/yarn重新分析依赖,正确跳过当前平台不需要的
fsevents。给electron-packager添加忽略规则
既然fsevents是macOS专属的,我们直接让打包工具跳过它就行。修改你的electron-packager打包命令,加上--ignore参数:electron-packager . YourAppName --platform=win32 --arch=x64 --ignore="fsevents"如果是在
package.json的scripts里配置的打包命令,就改成这样(注意转义引号):"scripts": { "package-win": "electron-packager . YourAppName --platform=win32 --arch=x64 --ignore=\"fsevents\"" }这样打包时就不会扫描
fsevents相关的文件,自然不会触发找不到模块的错误。更新chokidar版本(可选)
有些旧版本的chokidar(就是报错里提到的那个依赖)对跨平台可选依赖的处理不够灵活,你可以尝试把它更到最新稳定版:npm update chokidar --save-dev换用electron-builder(可选)
如果electron-packager的忽略规则还是搞不定,electron-builder对跨平台依赖的处理要智能得多,它会自动过滤当前平台不需要的可选依赖,打包流程也更省心。
先安装electron-builder:npm install electron-builder --save-dev然后在
package.json里添加打包脚本:"scripts": { "build-win": "electron-builder --win --x64" }运行
npm run build-win就能生成Windows的安装包了。
内容的提问来源于stack exchange,提问作者Jim

