如何将 sqlite3 模块与电子一起使用?
我想使用 electron 开发桌面应用程序,该应用程序使用通过 npm 安装的 sqlite3 包和命令
npm install --save sqlite3
但它在电子浏览器控制台中出现以下错误
未捕获错误:找不到模块 'E:allcodeeapp
ode_modulessqlite3libinding
ode-v45-win32-x64
ode_sqlite3.node'
我的开发环境是windows 8.1 x64节点版本 12.7
我的 package.json 文件如下所示:
<代码>{名称":eapp",版本":1.0.0",描述": "",主":index.js",脚本":{开始":电子."},作者": "",许可证":ISC",开发依赖":{电子预建":^0.32.1"},依赖":{角度":^1.3.5",sqlite3":^3.1.0"}}
index.js 文件
var app = require('app');var BrowserWindow = require('浏览器窗口');需要('崩溃报告').start();var mainWindow = null;app.on('window-all-close', function() {if (process.platform != 'darwin') {app.quit();}});app.on('准备好了', function() {//创建浏览器窗口.mainWindow = new BrowserWindow({width: 800, height: 600});mainWindow.loadUrl('file://' + __dirname + '/index.html');mainWindow.openDevTools();mainWindow.on('关闭', function() {主窗口 = 空;});});
my.js 文件
var sqlite3 = require('sqlite3').verbose();var db = new sqlite3.Database('mydb.db');db.serialize(函数(){db.run("CREATE TABLE 如果不存在 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="zh"><meta charset="UTF-8"><标题></标题></头><身体><h2>你好</h2></div></div><!--<script src="js/jquery-1.11.3.min.js"></script>--><script src="js/my.js"></script></身体></html>
解决方案 到目前为止,将 SQLite 与 electron 结合使用的最简单方法是使用 electron-builder
.
首先,在你的 package.json 中添加一个 postinstall 步骤:
脚本":{安装后":安装-应用程序-deps"...}
然后安装必要的依赖并构建:
npm install --save-dev electron-buildernpm install --save sqlite3npm 运行后安装
electron-builder 将为您的平台构建本机模块,并为 Electron 绑定使用正确的名称;然后你可以像往常一样在代码中require
它.
查看我的 github repo 和 博文 - 我也花了很长时间才弄明白.
I want to develop desktop app using electron that uses sqlite3 package installed via npm with the command
npm install --save sqlite3
but it gives the following error in electron browser console
Uncaught Error: Cannot find module 'E:allcodeeapp
ode_modulessqlite3libinding
ode-v45-win32-x64
ode_sqlite3.node'
My development environment is windows 8.1 x64 node version 12.7
my package.json file looks like this:
{
"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 file
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 file
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 file
<!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>
解决方案
By far the easiest way to use SQLite with electron is with electron-builder
.
First, add a postinstall step in your package.json:
"scripts": {
"postinstall": "install-app-deps"
...
}
and then install the necessary dependencies and build:
npm install --save-dev electron-builder
npm install --save sqlite3
npm run postinstall
electron-builder will build the native module for your platform, with the correct name for the Electron binding; and you can then require
it in code as normal.
See my github repo and blog post - it took me quite a while to figure this out too.
相关文章