首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在分叉过程中需要sqlite3本机模块时电子崩溃

在分叉过程中需要sqlite3本机模块时电子崩溃
EN

Stack Overflow用户
提问于 2018-10-19 18:17:08
回答 3查看 1.1K关注 0票数 4

我试图在带有电子的子进程中使用sqlite3模块,但是我得到了未定义符号的错误。而且,只有当我从电子的node.js运行程序时才会发生错误,但是当我从通常的node.js运行程序时,一切都很好。我认为这个问题可能与sqlite3模块的“本土化”有关,我尝试了electron-rebuildnpm --build-from-source,它们没有帮助。

main.js:

代码语言:javascript
运行
复制
const { fork } = require('child_process');
fork('fork');

fork.js:

代码语言:javascript
运行
复制
const sqlite3 = require('sqlite3');

package.json:

代码语言:javascript
运行
复制
{
  "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"
  }
}

产出:

代码语言:javascript
运行
复制
> ./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
EN

Stack Overflow用户

发布于 2020-04-11 09:59:59

这只是我的两分钱,因为这些问题可能非常耗时:我还在分叉一个依赖于电子应用程序的sqlite3的进程。

我的设置和工作方式如下(电子表格v8.0.1):

有两个项目文件夹,“父”和“子”。父项目是带有主代码和呈现程序代码的电子项目。

在父母中:

  1. 包含为devDependency: electron-builder
  2. 添加为postinstall脚本electron-builder install-app-deps
  3. 如果这是在立即添加电子生成器,运行后手动安装。将来它会在npm i之后自动运行

这应该注意重建sqlite3对抗电子。

现在,让子进程使用这个库。

  1. 子进程开发也依赖sqlite,所以只需在本地安装即可。
  2. 我使用webpack捆绑了所有js文件。
  3. 为了让webpack在后台工作,我补充说
代码语言:javascript
运行
复制
externals: {
    sqlite3: 'commonjs sqlite3'
  },

(这样webpack就不会尝试捆绑sqlite3,因为它不适用于本机模块。

回到父母:

假设输出包名为"child.js",将其复制到父文件夹,并将其添加到“Electre-builder.json”文件中的files属性,例如files: ["!*.log", "!doc", ..., "child.js"]。就像这样,子程序被添加到应用程序根目录下的asar存档中。不要使用电子生成器的extraFiles/extraResources,试着像那样叉孩子,你的孩子找不到sqlite3。

在应用程序的"main.ts“文件中,将孩子作为

代码语言:javascript
运行
复制
fork(path.resolve(app.getAppPath(), 'child.js')

这应该行,希望这对任何人都有帮助。

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52897950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档