Comment utiliser le module sqlite3 avec electron?

je veux développer une application de bureau en utilisant electron qui utilise le paquet sqlite3 installé via npm avec la commande

npm install --save sqlite3

mais il donne l'erreur suivante dans la console de navigateur électronique

Uncaught Error: Cannot find module 'E:allcodeeappnode_modulessqlite3libbindingnode-v45-win32-x64node_sqlite3.node'

mon environnement de développement est windows 8.1 x64 node version 12.7

mon paquet .json fichier ressemble à ceci:

{
  "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"
  }
}

de l'index.fichier 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;
    });
});

mon.fichier 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();

de l'index.fichier 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>
46
demandé sur statox 2015-09-10 17:13:32

8 réponses

de loin, la façon la plus facile d'utiliser SQLite avec électron est avec electron-builder .

tout d'abord, ajoutez une étape postinstall dans votre paquet.json:

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

et ensuite installer les dépendances nécessaires et construire:

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

electron-builder construira le module natif pour votre plate-forme, avec le nom correct pour la liaison électronique; et vous pouvez alors require il en code comme d'habitude.

Voir mon dépôt github et blog post - il m'a fallu un certain temps pour comprendre cela.

60
répondu Steve Melia 2017-03-05 05:25:52

Je ne recommande pas le module sqlite3 de noeud natif. Il faut être reconstruit pour travailler avec l'électron. Il s'agit d'une énorme douleur à faire - au moins je ne peux jamais obtenir à travailler et leur pas d'instructions pour la reconstruction des modules sur windows.

regardez plutôt le sql de kripken.module de js qui est sqlite3 qui a été compilé à 100% en JavaScript. https://github.com/kripken/sql.js /

14
répondu Joue Bien 2016-12-18 10:16:53

deux aspects doivent être considérés ici:

  1. paramétrage NODE_PATH : cela permet à l'électron de savoir où trouver vos modules (voir cette réponse pour une explication détaillée)
  2. compilation de modules natifs contre des en-têtes électroniques: voir docs

et vérifier les questions suivantes, qui demandent la même chose:


mon conseil serait de donner lovefield (par Google) un essai.

7
répondu Yan Foto 2017-05-23 12:34:50

une solution plus simple:

  1. Installer électron-reconstruction npm i electron-rebuild --save-dev
  2. Lancement d'électrons reconstruire ./node_modules/.bin/electron-rebuild (ou .\node_modules\.bin\electron-rebuild.cmd sur windows)
  3. Aller à " node_modules/sqlite3/lib/liaison/ "et renommez le dossier" électron-v0.36-darwin-x64 "" nœud v47 -darwin-x64 "

PS: v47 est ma version, veillez à choisir la bonne (dans votre cas v45 )

5
répondu Fabien Sa 2015-12-21 00:32:56

j'avais le même problème. Tout essayé et au moins cela a fonctionné pour moi: -

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

Cela va créer un "électron-v1.3-win32-x64" dans le dossier .\node_modules\sqlite3\lib\contraignant\ emplacement qui est utilisé par des électrons à utiliser sqlite3.

Juste de démarrer l'application et vous serez en mesure d'utiliser sqlite3 maintenant.

5
répondu Rj-s 2016-08-21 10:38:04

Ont un look à la même réponse ici

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
2
répondu smkndblvr 2017-05-23 12:34:50

je rencontre cette erreur aussi. Voici comment je le résoudre: npm install --save-dev electron-rebuild puis: ./node_modules/.bin/electron-rebuild

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

ps: pendant qu'il est en reconstruction, ne pas utiliser npm start pour Lancher l'application électronique. Sinon, le processus de reconstruction échouerait.

1
répondu valleygtc 2018-06-19 11:43:08
npm install sqlite3

npm install --save sql.js

la structure du dossier doit ressembler à

pour créer une nouvelle base de données SQLite nommé "db" avec un simple table nommée "test123", vous pourriez faire ceci:

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>

Sortie

-1
répondu Lalit Tyagi 2017-07-10 06:15:26