如何使用带电子的sqlite3模块?

man*_*nas 73 sqlite node.js npm electron

我想使用电子开发桌面应用程序,该电子使用通过npm通过命令安装的sqlite3软件包

npm install --save sqlite3
Run Code Online (Sandbox Code Playgroud)

但它在电子浏览器控制台中出现以下错误

Uncaught Error: Cannot find module 'E:\allcode\eapp\node_modules\sqlite3\lib\binding\node-v45-win32-x64\node_sqlite3.node'
Run Code Online (Sandbox Code Playgroud)

我的开发环境是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"
  }
}
Run Code Online (Sandbox Code Playgroud)

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;
    });
});
Run Code Online (Sandbox Code Playgroud)

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();
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

小智 104

到目前为止,使用SQLite和电子的最简单方法是electron-builder.

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

"scripts": {
   "postinstall": "install-app-deps"
   ...
}
Run Code Online (Sandbox Code Playgroud)

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

npm install --save-dev electron-builder
npm install --save sqlite3
npm run postinstall
Run Code Online (Sandbox Code Playgroud)

电子建设者将为您的平台构建本机模块,具有正确的Electron绑定名称; 你可以require像往常一样在代码中使用它.

看看我的github回购博客文章 - 我花了很长时间来弄清楚这一点.

  • 不应该是 `"postinstall": "electron-builder install-app-deps"` 吗? (4认同)
  • 使用 Electron-boilerplate-sqlite 确实是更简单的方法,但是使用“npm install” (2认同)
  • 将 sqlite3 与电子应用程序一起使用的最简单方法是遵循此处的 sqlite3 文档:https://www.npmjs.com/package/sqlite3#custom-builds-and-electron。适用于 Electron 8.3.0,无需重建。我只是让 Sailab Rahi 的答案更加引人注目。 (2认同)

Jou*_*ien 17

我不推荐使用本机节点sqlite3模块.它需要重建才能使用电子.这是一个巨大的痛苦 - 至少我永远无法让它工作,他们没有指示在Windows上重建模块.

而是看看kripken的'sql.js'模块,它是在JavaScript中100%编译的sqlite3. https://github.com/kripken/sql.js/

  • 应该提到的是,sql.js无法在文件系统上运行.每次需要更改数据库时,都必须将整个内容写入磁盘.对大多数场景来说,它几乎没用. (10认同)
  • 电子文档非常清楚,为了使用捆绑的本机模块,您需要重建它们才能使用电子.要么使用大部分时间都能工作的电子重建工具,要么手动设置gyp标志:http://electron.atom.io/docs/tutorial/using-native-node-modules/ (3认同)
  • sql.js它更像是一个玩具,为了好玩.它不能比NeDB和其他nosql数据库更好,因为它将所有数据库存储在内存中.所以没有充分的理由使用它.对于小型数据库,使用像NeDB这样的nosql,为了更大,你必须编译sqlite (2认同)

Yan*_*oto 8

这里要考虑两个方面:

  1. 设置NODE_PATH:这让电子知道在哪里找到你的模块(请参阅这个答案以获得详尽的解释)
  2. 针对电子标题编译本机模块:请参阅官方文档

并检查以下问题,提出同样的问题:


我的建议是尝试给爱田(谷歌).


Rj-*_*j-s 7

我遇到了同样的问题.尝试了一切,并且这对我有用: -

npm install --save sqlite3
npm install --save electron-rebuild
npm install --save electron-prebuilt
.\node_modules\.bin\electron-rebuild.cmd
Run Code Online (Sandbox Code Playgroud)

这将在.\node_modules\sqlite3\lib\binding\location中创建"electron-v1.3-win32-x64"文件夹,电子使用该文件夹来使用sqlite3.

只需启动应用程序,您就可以立即使用sqlite3了.


Fab*_* Sa 6

更简单的解决方案:

  1. 安装电子重建 npm i electron-rebuild --save-dev
  2. 启动电子重建./node_modules/.bin/electron-rebuild(或.\node_modules\.bin\electron-rebuild.cmd在窗口上)
  3. 进入" node_modules/sqlite3的/ lib中/结合/ "和重命名文件夹" 电子v0.36-达尔文-64 "至" 节点- V47 -darwin-64 "

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

  • 您能解释一下第三步吗?为什么要重命名? (3认同)
  • 哈哈,谢谢你 4 年后的回复@fabien-sa。它提醒我从那时起我已经成长了多少。现在我正在维护我自己的 SQLite3 库。 (2认同)

Sai*_*ahi 5

它适用于版本 3 和 4,不幸的是版本 5 不适用。有关详细信息,请参阅 sqlite3 文档:https://www.npmjs.com/package/sqlite3#custom-builds-and-electron或运行以下行:npm install sqlite3 --runtime=electron --target=4.0.0 --dist-url=https://atom.io/download/electron


nic*_*van 5

npm install --save sqlite3
npm install --save-dev electron-rebuild
Run Code Online (Sandbox Code Playgroud)

然后,在 package.json 的脚本中,添加以下行:

"scripts": {
  "postinstall": "electron-rebuild",
  ...
},
Run Code Online (Sandbox Code Playgroud)

然后只需重新安装即可触发安装后:

npm install
Run Code Online (Sandbox Code Playgroud)

在一个复杂的用例中对我来说完美无缺,还涉及电子构建器、电子网络包和续集。

它适用于 electron-webpack 的开发模式和 Windows 和 Linux 的生产模式。