如何使用电子sqlite3模块?
我想开发使用电子的桌面应用程序,该命令使用通过npm安装的sqlite3软件包
npm install --save sqlite3
但在电子浏览器控制台中会出现以下错误
Uncaught Error: Cannot find module 'E:\allcode\eapp\node_modules\sqlite3\lib\binding\node-v45-win32-x64\node_sqlite3.node'
我的开发环境是Windows 8.1 x64节点版本12.7
我的package.json文件如下所示:
{ "name": "eapp", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "electron ." }, "author": "", "license": "ISC", "devDependencies": { "electron-prebuilt": "^0.32.1" }, "dependencies": { "angular": "^1.3.5", "sqlite3": "^3.1.0" } }
index.js文件
var app = require('app'); var BrowserWindow = require('browser-window'); require('crash-reporter').start(); var mainWindow = null; app.on('window-all-closed', function() { if (process.platform != 'darwin') { app.quit(); } }); app.on('ready', function() { // Create the browser window. mainWindow = new BrowserWindow({width: 800, height: 600}); mainWindow.loadUrl('file://' + __dirname + '/index.html'); mainWindow.openDevTools(); mainWindow.on('closed', function() { mainWindow = null; }); });
my.js文件
var sqlite3 = require('sqlite3').verbose(); var db = new sqlite3.Database('mydb.db'); db.serialize(function() { db.run("CREATE TABLE if not exists lorem (info TEXT)"); var stmt = db.prepare("INSERT INTO lorem VALUES (?)"); for (var i = 0; i < 10; i++) { stmt.run("Ipsum " + i); } stmt.finalize(); db.each("SELECT rowid AS id, info FROM lorem", function(err, row) { console.log(row.id + ": " + row.info); }); }); db.close();
index.html文件
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <div > <div> <h2>Hello</h2> </div> </div> <!--<script src="js/jquery-1.11.3.min.js"></script>--> <script src="js/my.js"></script> </body> </html>
到目前为止,使用SQLite和电子最简单的方法是使用electron-builder
。
首先,在你的package.json中添加一个postinstall步骤:
"scripts": { "postinstall": "install-app-deps" ... }
然后安装必要的依赖关系并构build:
npm install --save-dev electron-builder npm install --save sqlite3 npm run postinstall
电子构build器将为您的平台构build本地模块,同时为电子绑定创build正确的名称; 然后你可以像平常那样在代码中require
它。
看到我的github回购和博客文章 – 我花了相当长的一段时间才弄清楚这一点。
我不会推荐本地节点sqlite3模块。 它需要重build与电子一起工作。 这是一个巨大的痛苦 – 至less我永远不能得到它的工作,他们没有指示重build模块在Windows上。
而是看看kripken的“sql.js”模块是sqlite3,它已经在JavaScript中编译了100%。 https://github.com/kripken/sql.js/
这里要考虑两个方面:
- 设置
NODE_PATH
:这让电子知道在哪里可以find你的模块(详细解释见这个答案 ) - 根据电子标题编译本地模块:查看官方文档
并检查以下问题,问同样的事情:
- 电子应用程序与数据库
- 在Elelectron中使用NodeJS插件
我的build议是给爱情 (谷歌)一试。
更简单的解决scheme:
- 安装电子重build
npm i electron-rebuild --save-dev
- 在Windows上启动electron-rebuild
./node_modules/.bin/electron-rebuild
(或.\node_modules\.bin\electron-rebuild.cmd
) - 转到“ node_modules / sqlite3 / lib / binding / ”并将文件夹“ electron-v0.36-darwin-x64 ”重命名为“ node- v47 -darwin-x64 ”
PS: v47是我的版本,要小心select好的(在你的情况v45 )
我有同样的问题。 尝试了一切,最后这对我工作: –
npm install --save sqlite3 npm install --save electron-rebuild npm install --save electron-prebuilt .\node_modules\.bin\electron-rebuild.cmd
这将在电子使用sqlite3的。\ node_modules \ sqlite3 \ lib \ binding \ location中创build“electron-v1.3-win32-x64”文件夹。
只需启动应用程序,你现在就可以使用sqlite3了。
在这里看看类似的答案
TL; DR
cd .\node_modules\sqlite3 npm install nan --save npm run prepublish node-gyp configure --module_name=node_sqlite3 --module_path=../lib/binding/electron-v1.3-win32-x64 node-gyp rebuild --target=1.3.2 --arch=x64 --target_platform=win32 --dist-url=http://electron.atom.io/ --module_name=node_sqlite3 --module_path=../lib/binding/electron-v1.3-win32-x64
npm install sqlite3 npm install --save sql.js
文件夹结构应该像
要使用名为“test123”的单个表创build一个名为“db”的新SQLite数据库,您可以这样做:
SQLite version 3.11.0 2016-02-15 17:29:24 Enter ".help" for usage hints. sqlite> create table test123(id int,fname varchar(20), lname varchar(20)); sqlite> insert into test123 values(1,'lalit','tyagi'); sqlite> insert into test123 values(2,'vineet','tyagi'); sqlite> insert into test123 values(3,'nihal','jumhare'); sqlite> insert into test123 values(4,'mandip','gothadiya'); sqlite> insert into test123 values(5,'jaggu','mohan'); sqlite> select *from test123; 1|lalit|tyagi 2|vineet|tyagi 3|nihal|jumhare 4|mandip|gothadiya 5|jaggu|mohan sqlite>
产量