【问题标题】:Connecting electron with sqlite3用 sqlite3 连接电子
【发布时间】:2016-10-13 04:57:00
【问题描述】:

我想将电子与 sqlite3 连接起来。下面列出了我的 package.json 文件

{
  "name": "electrontest2",
  "version": "1.0.0",
  "description": "",
  "main": "db.js",
  "scripts": {
    "start": "electron ."
  },

"scripts": {
"start": "electron ."
},
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "electron-prebuilt": "^1.2.2"
  },
  "dependencies": {
    "jquery": "^2.1.4",
    "sqlite3": "^3.1.4"
  }
}

但是在执行 npm start 时会抛出此错误

App threw an error during load
Error: Cannot find module '/var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/binding/electron-v1.2-linux-x64/node_sqlite3.node'
    at Module._resolveFilename (module.js:438:15)
    at Function.Module._resolveFilename (/var/www/tools/node/project/electrontest2/node_modules/electron-prebuilt/dist/resources/electron.asar/common/reset-search-paths.js:47:12)
    at Function.Module._load (module.js:386:25)
    at Module.require (module.js:466:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/sqlite3.js:4:15)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:456:32)
    at tryModuleLoad (module.js:415:12)
A JavaScript error occurred in the main process
Uncaught Exception:
Error: Cannot find module '/var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/binding/electron-v1.2-linux-x64/node_sqlite3.node'
    at Module._resolveFilename (module.js:438:15)
    at Function.Module._resolveFilename (/var/www/tools/node/project/electrontest2/node_modules/electron-prebuilt/dist/resources/electron.asar/common/reset-search-paths.js:47:12)
    at Function.Module._load (module.js:386:25)
    at Module.require (module.js:466:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/sqlite3.js:4:15)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:456:32)
    at tryModuleLoad (module.js:415:12)

我认为我遇到了这个错误:

'/var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/binding/node-v46-linux-x64/node_sqlite3.node'

而不是

'/var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/binding/electron-v1.2-linux-x64/node_sqlite3.node'

请告诉我哪里出错了。目前在运行应用程序时,它会抛出上面列出的错误。

【问题讨论】:

标签: node.js electron


【解决方案1】:

尝试如下重建 sqlite3 包:

cd node_modules/sqlite3
npm run prepublish
node-gyp configure --module_name=node_sqlite3 --module_path=../lib/binding/electron-v1.2-linux-x64
node-gyp rebuild --target=0.37.2 --arch=x64 --target_platform=linux --dist-url=https://atom.io/download/atom-shell --module_name=node_sqlite3 --module_path=../lib/binding/electron-v1.2-linux-x64

检查你是什么电子版

electron -v

将 --target 值替换为您的电子包的版本。

【讨论】:

  • 感谢@LuisPinto,我在终端(Ubuntu 14.04)中运行列出的所有代码。但它并没有解决问题。它在 /var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/binding/ 内创建一个新文件夹 node-v47-linux-x64 。我想我们需要这个路径“/var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/binding/”中的这个文件夹“electron-v1.2-linux-x64”来解决这个问题。请告诉我该怎么做??如果我做错了,请纠正我。提前致谢。
  • 节点版本:v4.4.5,NPM 版本:2.15.5
  • 请告知哪个 sqlite3 版本与电子 1.2.2 版本兼容。我试过类似.. cd node_modules/sqlite3 npm run prepublish node-gyp configure --module_name=node_sqlite3 --module_path=../lib/binding/electron-v1.2-linux-x64 node-gyp rebuild --target= 0.27.1 --arch=x64 --target_platform=darwin --dist-url=atom.io/download/atom-shell --module_name=node_sqlite3 --module_path=../lib/binding/electron-v1.2-linux-x64 但它是抛出错误:模块版本不匹配。预期 48,得到 43。我认为这是一些版本问题。请帮助我在哪里犯错。
【解决方案2】:

如果您使用的是旧版本,例如,我尝试使用最新的 Node 版本 (6.2.2) 运行它。 4.2 那么您将获得一个较旧的捆绑包,而不是您的电子所需的 v48:

npm install sqlite3 --build-from-source

然后简单地将 node_modules/sqlite3/lib/binding 中的文件夹从 node-v48-linux-x64 重命名为 electron-v1.2-linux-x64。

它开始抱怨要求回调如果它们应该是可选的,但我只是像这样添加它们并且它起作用了:

var stmt = db.prepare(
  "INSERT INTO discount VALUES (?, ?, ?)",
  [1,2,3],
  () => true //Expected callback that is supposed to be optional
);

我只是出于简单的目的在我的电子应用程序中需要 Sqlite,并且在我的实现中没有任何其他问题。

【讨论】:

    【解决方案3】:

    你说得对,错误是因为编译的 SQLite 模块默认以 Node 命名;因此电子找不到它。使用node-gyp 以正确的名称重建,如answer above 应该可以工作;但是使用 npm 包 electron-builder 会容易得多,这将为您提供更好的工作流程,并且可以在多个平台和版本上工作,而无需为 node-gyp 添加脚本。

    请参阅this answer 以了解详细说明如何使其工作的类似问题。

    【讨论】:

      【解决方案4】:

      首先在你的 package.json 中添加新的 postinstall 脚本

      "scripts": { "postinstall": "install-app-deps" }

      然后使用安装它: npm install --save-dev electron-builder npm install --save sqlite3 npm run postinstall

      您也可以在以下位置找到相同的内容: Electron application SQLITE package has not been found installed

      【讨论】:

        猜你喜欢
        • 2021-12-17
        • 2020-09-23
        • 2013-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-26
        • 2018-04-25
        • 2017-11-28
        相关资源
        最近更新 更多