Electron Forge打包Windows可执行文件启动报错:需手动安装sqlite3
解决Electron Forge打包后SQLite3无法加载的问题
以下是针对打包后Windows可执行文件报错Please install the sqlite3 package manually on startup的解决步骤:
步骤1:将electron-rebuild加入打包前置脚本
确保打包前自动重新编译sqlite3,避免手动执行的遗漏。修改package.json的scripts:"scripts": { "postinstall": "electron-rebuild -f -w sqlite3", "publish": "electron-forge publish" }执行
npm install触发postinstall,确保sqlite3针对当前Electron版本编译完成。步骤2:修正Webpack externals配置
原数组格式的externals可能无法正确识别commonjs模块,改为指定模块类型:module.exports = { resolve: { extensions: ['.ts', '.js'], }, entry: './electron/main.ts', module: { rules: require('./rules.webpack'), }, externals: { sqlite3: 'commonjs sqlite3' } }步骤3:配置Electron Forge打包选项,确保二进制文件被正确包含
在forge.config.js(或.ts)中添加packager配置,解决asar包无法读取.node二进制文件的问题:module.exports = { packagerConfig: { asarUnpack: ['node_modules/sqlite3/**/*'], extraResources: [ { from: 'node_modules/sqlite3/lib/binding/', to: 'node_modules/sqlite3/lib/binding/', filter: ['**/*'] } ] }, // 其他已有配置... }asarUnpack会将sqlite3的相关文件从asar包中解压出来,extraResources确保编译后的二进制文件被复制到打包产物的对应目录。步骤4:验证并手动指定绑定路径(可选)
如果上述步骤仍未解决,可在代码中手动指定sqlite3的二进制文件路径,适配Electron运行环境:const sqlite3 = require('sqlite3').verbose(); const path = require('path'); const electronVersion = process.versions.electron.split('.')[0]; // 取主版本号,如28 const bindingPath = path.join( process.resourcesPath, `node_modules/sqlite3/lib/binding/electron-v${electronVersion}-win32-x64/node_sqlite3.node` ); // 覆盖sqlite3的绑定模块 sqlite3.verbose().module.exports = require(bindingPath);步骤5:强制从源码编译sqlite3(可选)
若依赖安装时编译不完整,可手动执行以下命令重新安装sqlite3:npm uninstall sqlite3 npm install sqlite3 --build-from-source --runtime=electron --target=${process.versions.electron} --dist-url=https://electronjs.org/headers
内容的提问来源于stack exchange,提问作者sm9ke
相关产品推荐
相关产品推荐

