Node.js 用sqlite3连接电子
我想把electron和sqlite3连接起来。下面列出了我的package.json文件Node.js 用sqlite3连接电子,node.js,electron,Node.js,Electron,我想把electron和sqlite3连接起来。下面列出了我的package.json文件 { "name": "electrontest2", "version": "1.0.0", "description": "", "main": "db.js", "scripts": { "start": "electron ." }, "scripts": { "start": "electron ." }, "author": "", "license":
{
"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启动时,它抛出了这个错误
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\u modules/sqlite3/lib/binding/electron-v1.2-linux-x64/node\u sqlite3.node”
在Module.\u解析文件名(Module.js:438:15)
位于Function.Module.\u resolveFilename(/var/www/tools/node/project/electrontest2/node\u modules/electron prebuild/dist/resources/electron.asar/common/reset search path.js:47:12)
在Function.Module.\u加载(Module.js:386:25)
at Module.require(Module.js:466:17)
根据需要(内部/module.js:20:19)
反对。(/var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/sqlite3.js:4:15)
在模块处编译(Module.js:541:32)
在Object.Module._extensions..js(Module.js:550:10)
在Module.load(Module.js:456:32)
在tryModuleLoad时(module.js:415:12)
主进程中发生JavaScript错误
未捕获异常:
错误:找不到模块“/var/www/tools/node/project/electrontest2/node\u modules/sqlite3/lib/binding/electron-v1.2-linux-x64/node\u sqlite3.node”
在Module.\u解析文件名(Module.js:438:15)
位于Function.Module.\u resolveFilename(/var/www/tools/node/project/electrontest2/node\u modules/electron prebuild/dist/resources/electron.asar/common/reset search path.js:47:12)
在Function.Module.\u加载(Module.js:386:25)
at Module.require(Module.js:466:17)
根据需要(内部/module.js:20:19)
反对。(/var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/sqlite3.js:4:15)
在模块处编译(Module.js:541:32)
在Object.Module._extensions..js(Module.js:550:10)
在Module.load(Module.js:456:32)
在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”
请告诉我哪里出错了。当前,在运行应用程序时,它抛出了上面列出的错误。请尝试按如下方式重建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
用electron软件包的vesion替换--目标值。我尝试使用最新的节点版本(6.2.2)运行此功能,如果您使用的是较旧的版本,例如4.2,则您将获得较旧的捆绑包,而不是electron需要的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
);
我只是出于简单的目的在我的electron应用程序中需要Sqlite,在我的实现中没有任何其他问题。您是正确的,错误是因为编译的Sqlite模块默认以节点命名;所以电子找不到它。使用
节点gyp
以正确的名称重建,如中所示;但是使用npm软件包electron builder
要容易得多,它将为您提供更好的工作流程,并且可以使用多个平台和版本,而无需为节点gyp
添加脚本
请参阅一个类似的问题,其中详细介绍了如何使其工作。首先在package.json中添加新的postinstall脚本
“脚本”:{
“postinstall”:“安装应用程序deps”
}
然后使用以下方法安装:
npm安装--保存开发人员electron builder
npm安装--保存sqlite3
安装后运行npm
您也可以在以下网址找到相同的内容:
谢谢@LuisPinto,我运行终端(Ubuntu 14.04)中列出的所有代码。但这并没有解决问题。它在/var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/binding/内创建一个新文件夹node-v47-linux-x64。我想我们需要这个路径中的文件夹“electron-v1.2-linux-x64”/var/www/tools/node/project/electrontest2/node_modules/sqlite3/lib/binding/”来解决这个问题。请告诉我怎么做??如果我做错了,请纠正我。提前感谢。节点版本:v4.4.5,NPM版本:2.15.5请告知哪个sqlite3版本与electron 1.2.2版本兼容。我试过类似于。。cd节点\u modules/sqlite3 npm运行预发布节点gyp configure--module\u name=node\u sqlite3--module\u path=../lib/binding/electron-v1.2-linux-x64节点gyp rebuild--target=0.27.1--arch=x64--target\u platform=darwin--dist url=--module\u name=node\u sqlite3--module path=../lib binding/electron-v1.2-linux-x64但抛出错误:module version不匹配。预期48,得到43。我认为这是版本问题。请帮助我了解我犯的错误。你有没有解决过这个问题。我遇到了完全相同的问题。重复的(?)