打包的Electron App找不到模块sqlite3

时间:2016-07-26 22:35:25

标签: sqlite electron

背景

在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?即使是“黑客”或变通方法也是受欢迎的,因为我尝试了各种修复无济于事。

2 个答案:

答案 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模块安装位置的所有内容?