node.js-如何将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>
manas asked 2019-10-09T17:14:44Z
7个解决方案
83 votes

到目前为止,将SQLite与电子结合使用的最简单方法是使用electron-builder

首先,在package.json中添加一个postinstall步骤:

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

然后安装必要的依赖项并进行构建:

npm install --save-dev electron-builder
npm install --save sqlite3
npm run postinstall

electronic-builder将为您的平台构建本机模块,并使用Electron绑定的正确名称; 然后您可以像往常一样在代码中require

参见我的github仓库和博客文章-我花了相当长的时间才弄清楚这一点。

Steve Melia answered 2019-10-09T17:15:23Z
16 votes

我不推荐本机节点sqlite3模块。 它需要重建才能与电子一起工作。 这是一件非常痛苦的事情-至少我永远无法使它正常工作,并且他们没有在Windows上重建模块的说明。

相反,请查看kripken的“ sql.js”模块,该模块是sqlite3,已使用JavaScript进行了100%编译。 [https://github.com/kripken/sql.js/]

Joue Bien answered 2019-10-09T17:15:55Z
8 votes

这里要考虑两个方面:

  1. 设置NODE_PATH:这使电子知道在哪里找到模块(有关详细说明,请参见此答案)
  2. 针对电子标头编译本机模块:请参阅官方文档

并检查以下问题,这些问题会问同样的事情:

  • 电子数据库应用程序
  • 在Electron中使用Node JS插件

我的建议是尝试(由Google提供)lovefield。

Yan Foto answered 2019-10-09T17:16:59Z
6 votes

一个更简单的解决方案:

  1. 安装电子重建npm i electron-rebuild --save-dev
  2. 启动电子重建./node_modules/.bin/electron-rebuild(或Windows上的.\node_modules\.bin\electron-rebuild.cmd
  3. 转到“ node_modules / sqlite3 / lib / binding /”,并将文件夹“ electron-v0.36-darwin-x64”重命名为“ node-v47-darwin-x64”

PS:v47是我的版本,请小心选择好版本(在您的情况下为v45)

Fabien Sa answered 2019-10-09T17:17:51Z
6 votes

我有同样的问题。 尝试了一切,最后这对我有用:-

npm install --save sqlite3
npm install --save electron-rebuild
npm install --save electron-prebuilt
.\node_modules\.bin\electron-rebuild.cmd

这将在。\ node_modules \ sqlite3 \ lib \ binding \位置中创建“ electron-v1.3-win32-x64”文件夹,电子将其用于使用sqlite3。

只需启动应用程序,您现在就可以使用sqlite3。

Rj-s answered 2019-10-09T17:18:30Z
3 votes

在这里看看类似的答案

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
smkndblvr answered 2019-10-09T17:18:58Z
2 votes

我也遇到这个错误。 这是我的解决方法:npm start然后: ./node_modules/.bin/electron-rebuild

来自:[https://electronjs.org/docs/tutorial/using-native-node-modules]

ps:在重建时,请勿使用npm start来启动电子应用程序。 否则,重建过程将失败。

valleygtc answered 2019-10-09T17:19:37Z
translate from https://stackoverflow.com:/questions/32504307/how-to-use-sqlite3-module-with-electron