首页 文章

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

提问于
浏览
51

我想使用electron开发桌面应用程序,该应用程序使用通过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 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>

8 回答

  • 2

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

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

  • -1

    更简单的解决方案:

    • 安装电子重建 npm i electron-rebuild --save-dev

    • 启动电子重建 ./node_modules/.bin/electron-rebuild (或Windows上的 .\node_modules\.bin\electron-rebuild.cmd

    • 转到“ node_modules/sqlite3/lib/binding/ " and rename the folder " electron-v0.36-darwin-x64 " to " node-v47-darwin-x64

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

  • 5

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

    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 \ location中创建“electron-v1.3-win32-x64”文件夹,电子使用该文件夹来使用sqlite3 .

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

  • 5

    这里要考虑两个方面:

    • 设置 NODE_PATH :这让电子知道在哪里可以找到您的模块(有关详细说明,请参阅this answer

    • 针对电子 Headers 编译本机模块:请参阅官方docs

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


    My tip 会试试lovefield(谷歌) .

  • 7

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

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

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

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

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

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

    看到我的github repoblog post - 我花了很长时间才弄明白这一点 .

  • 69

    看看类似的答案here

    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
    
  • 14

    我也遇到这个错误 . 以下是我如何解决它: npm install --save-dev electron-rebuild 然后: ./node_modules/.bin/electron-rebuild

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

    ps:虽然它's on rebuilding, don' t使用 npm start 来 grab 电子应用程序 . 否则,重建过程将失败 .

  • 1
    npm install sqlite3
    
    npm install --save sql.js
    

    Folder structure should be like

    要使用名为“test123”的单个表创建名为“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>
    

    Output

相关问题