在分叉进程中需要 sqlite3 本机模块时,Electron 崩溃

Naz*_*kov 5 node.js electron

我试图在电子子进程中使用 sqlite3 模块,但出现未定义符号的错误。另外,只有当我从 Electron 的 Node.js 运行程序时才会发生错误,但是当我从普通的 Node.js 运行程序时一切正常。我认为问题可能与 sqlite3 模块的“本机性”有关,我尝试过electron-rebuildnpm --build-from-source但它们没有帮助。

main.js:

const { fork } = require('child_process');
fork('fork');
Run Code Online (Sandbox Code Playgroud)

fork.js:

const sqlite3 = require('sqlite3');
Run Code Online (Sandbox Code Playgroud)

包.json:

{
  "name": "bugreproduce_sqlite",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "sqlite3": "^4.0.2"
  },
  "devDependencies": {
    "electron": "^3.0.5"
  }
}
Run Code Online (Sandbox Code Playgroud)

输出:

> ./node_modules/electron/dist/electron .
/home/myuser/Programming/javascript/bugreproduce_sqlite/node_modules/electron/dist/electron: symbol lookup error: /home/myuser/Programming/javascript/bugreproduce_sqlite/node_modules/sqlite3/lib/binding/node-v64-linux-x64/node_sqlite3.node: undefined symbol: _ZN2v816FunctionTemplate3NewEPNS_7IsolateEPFvRKNS_20FunctionCallbackInfoINS_5ValueEEEENS_5LocalIS4_EENSA_INS_9SignatureEEEiNS_19ConstructorBehaviorENS_14SideEffectTypeE
Run Code Online (Sandbox Code Playgroud)

Naz*_*kov 1

我找到了根本问题。这是GitHub 上的相关问题拉取请求 1拉取请求 2 。

我暂时解决问题的步骤是:

  • 克隆node-pre-gyp git存储库
  • checkout到 sqlite3 想要的版本(目前为 0.10.3)
  • 应用第二个拉取请求中的补丁
  • npm install ../path/to/patched/node-pre-gyp从主项目文件夹安装这个修补过的node-pre-gyp
  • npm i --build-from-source sqlite3(不确定是否需要此命令)和./node_modules/.bin/electron-rebuild主项目文件夹(我安装了 electro-rebuild)
  • 使用电子版本集进行调用fork,如下所示:

    fork('fork', [], { env: { ELECTRON_VERSION: "3.0.5" }});

这是一个 hack,但似乎有效。希望上游能解决这个问题。

编辑:修复了拉取请求链接(我使用了第二个拉取请求,而不是第一个)