我试图在带有电子的子进程中使用sqlite3模块,但是我得到了未定义符号的错误。而且,只有当我从电子的node.js运行程序时才会发生错误,但是当我从通常的node.js运行程序时,一切都很好。我认为这个问题可能与sqlite3模块的“本土化”有关,我尝试了electron-rebuild,npm --build-from-source,它们没有帮助。
main.js:
const { fork } = require('child_process');
fork('fork');fork.js:
const sqlite3 = require('sqlite3');package.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"
}
}产出:
> ./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发布于 2020-04-11 09:59:59
这只是我的两分钱,因为这些问题可能非常耗时:我还在分叉一个依赖于电子应用程序的sqlite3的进程。
我的设置和工作方式如下(电子表格v8.0.1):
有两个项目文件夹,“父”和“子”。父项目是带有主代码和呈现程序代码的电子项目。
在父母中:
devDependency: electron-builderelectron-builder install-app-depsnpm i之后自动运行这应该注意重建sqlite3对抗电子。
现在,让子进程使用这个库。
externals: {
sqlite3: 'commonjs sqlite3'
},(这样webpack就不会尝试捆绑sqlite3,因为它不适用于本机模块。
回到父母:
假设输出包名为"child.js",将其复制到父文件夹,并将其添加到“Electre-builder.json”文件中的files属性,例如files: ["!*.log", "!doc", ..., "child.js"]。就像这样,子程序被添加到应用程序根目录下的asar存档中。不要使用电子生成器的extraFiles/extraResources,试着像那样叉孩子,你的孩子找不到sqlite3。
在应用程序的"main.ts“文件中,将孩子作为
fork(path.resolve(app.getAppPath(), 'child.js')这应该行,希望这对任何人都有帮助。
https://stackoverflow.com/questions/52897950
复制相似问题