Linux下Electron Forge Vite打包后无法找到better-sqlite3模块
解决Electron Forge Vite打包deb后找不到better-sqlite3的问题
以下是针对该问题的分步解决方案:
1. 配置Vite主进程外部化原生模块
better-sqlite3作为原生模块,不能被Vite打包进主进程代码,需要保留require调用。在你的vite_configs/vite.main.config.mjs中添加Rollup外部化配置:
export default { // 原有配置... build: { rollupOptions: { external: ["better-sqlite3"] } } };
2. 确保原生模块被Asar解压
修改forge.config.js的packagerConfig,明确指定better-sqlite3目录不被Asar压缩,而是单独解压:
packagerConfig: { asar: true, executableName: "babel-gate", asarUnpack: [ "node_modules/better-sqlite3/**/*" ] },
3. 优化原生模块重编译配置
调整forge.config.js的rebuildConfig,强制针对better-sqlite3进行重编译,适配当前Electron版本:
rebuildConfig: { force: true, modules: ["better-sqlite3"] },
4. 添加自动重编译脚本
在package.json的scripts中添加postinstall脚本,确保每次安装依赖后自动重编译原生模块:
"scripts": { "start": "electron-forge start", "package": "electron-forge package", "make": "electron-forge make", "publish": "electron-forge publish", "lint": "echo \"No linting configured\"", "postinstall": "electron-rebuild -f -w better-sqlite3" }
5. 清理缓存后重新构建
执行以下命令彻底清理缓存并重新构建:
rm -rf node_modules package-lock.json npm install npm run make
6. 排查Fuses配置冲突(可选)
如果以上步骤无效,暂时注释掉forge.config.js中的FusesPlugin配置,重新打包测试。若问题解决,再逐步调整Fuses选项,确保OnlyLoadAppFromAsar等设置不会限制模块加载。
内容的提问来源于stack exchange,提问作者Fairy Jack
相关产品推荐
相关产品推荐

