背景的
在Electron应用程序中,sqlite3在npm install --save
之后无效。我做了一些网络研究后得到了它,通过:
(1)降级我的节点版本(通过n
)以匹配Electron的节点版本;和
(2)使用此package.json
脚本使用正确的模块名称/目标重建sqlite:
"rebuild-sqlite3": "cd node_modules/sqlite3 && npm run prepublish && node-gyp configure --module_name=node_sqlite3 --module_path=../lib/binding/electron-v1.2-darwin-x64 && node-gyp rebuild --target=1.2.6 --arch=x64 --target_platform=darwin --dist-url=https://atom.io/download/atom-shell --module_name=node_sqlite3 --module_path=../lib/binding/electron-v1.2-darwin-x64"
之后,Sqlite3在开发中工作(即当我在项目目录中运行electron .
时)。
问题
我使用electron-packager
打包应用:"./node_modules/.bin/webpack -p && ./node_modules/electron-packager/cli.js ./ --out ./bin --platform=darwin --arch=x64 --version=1.2.6 --overwrite --ignore=\"ignore|bin|node_modules\""
当我通过双击创建的(appName).app打开应用程序时,控制台会抱怨:`未捕获错误:找不到模块
问题
如何在最终的打包产品中找到sqlite3?即使是“黑客”或变通方法也是受欢迎的,因为我尝试了各种修复无济于事。
答案 0 :(得分:2)
我将这个答案留给了那些遇到同样问题且浪费时间去弄清楚的人。
<强>步骤1 强>
npm install sqlite3
electron .
我希望工作正常。但是我遇到了错误&#39;找不到节点模块sqlite3&#39;
<强>步骤2 强>
npm install electron-rebuild --save-dev
electron-rebuild -f -w sqlite3
electron .
它奏效了。
但如果您使用了电子包装商&#39;包装和制作可执行文件,它没有工作。发生了同样的错误。
"electron-packager . electron-tutorial-app --overwrite --asar --platform=win32 --arch=ia32 --icon=assets/icons/win/icon.ico --prune=true --out=new --version-string.CompanyName=CE --version-string.FileDescription=CE --version-string.ProductName=\"Electron Test\"",
<强>步骤3 强>
我花了很多时间才弄明白。最后,我想通了。 解决方案是使用电子封装器API并将afterCopy与电子重建相结合。
# build.js
const packager = require('electron-packager');
const rebuild = require('electron-rebuild');
packager({
dir: '../dir',
overwrite: true,
asar: true,
platform: 'win32',
arch: 'ia32',
icon: 'assets/icons/win/icon.ico',
prune: true,
out: 'hello',
executableName: 'hello',
afterCopy: [(buildPath, electronVersion, platform, arch, callback) => {
rebuild.rebuild({ buildPath, electronVersion, arch })
.then(() => callback())
.catch((error) => callback(error));
}],
})
node build.js
参考
答案 1 :(得分:1)
您传递给--ignore=\"ignore|bin|node_modules\"
的{{1}}是否忽略了electron-packager
目录中node_modules
模块安装位置的所有内容?