Comment utiliser le module sqlite3 avec électron?

Je souhaite développer une application de bureau utilisant des électrons utilisant le package sqlite3 installé via npm avec la commande

npm install --save sqlite3 

mais il donne l’erreur suivante dans la console du navigateur d’électrons

 Uncaught Error: Cannot find module 'E:\allcode\eapp\node_modules\sqlite3\lib\binding\node-v45-win32-x64\node_sqlite3.node' 

Mon environnement de développement est Windows 8.1 x64 node version 12.7

mon fichier package.json 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" } } 

fichier 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; }); }); 

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

fichier index.html

        

Hello

<!---->

Le moyen le plus simple d’utiliser SQLite avec électron est de electron-builder .

Tout d’abord, ajoutez une étape de post-installation dans votre package.json:

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

puis installez les dépendances nécessaires et comstackz:

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

électron-builder va construire le module natif pour votre plate-forme, avec le nom correct pour la liaison Electron; et vous pouvez alors l’ require dans le code comme d’habitude.

Voir mon repo github et blog – il m’a fallu pas mal de temps pour comprendre cela.

Je ne recommanderais pas le module natif sqlite3. Il faut être reconstruit pour travailler avec des électrons. C’est une douleur énorme à faire – Au moins, je ne peux jamais le faire fonctionner et leur aucune instruction de reconstruire des modules sur Windows.

Au lieu de cela, jetez un coup d’œil au module «sql.js» de kripken, qui est sqlite3 et qui a été compilé à 100% en JavaScript. https://github.com/kripken/sql.js/

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

  1. Réglage de NODE_PATH : cela permet aux électrons de savoir où trouver vos modules (voir cette réponse pour une explication approfondie)
  2. Compilation de modules natifs contre les en-têtes d’électrons: voir les documents officiels

Et consultez les questions suivantes, qui demandent la même chose:

  • App Electron avec firebase database
  • Utilisation de plug-ins NodeJS dans Elelectron

Mon conseil serait d’ essayer Lovefield (par Google).

Une solution plus simple:

  1. Installer electron-rebuild npm i electron-rebuild --save-dev
  2. Lancez electron-rebuild ./node_modules/.bin/electron-rebuild (ou .\node_modules\.bin\electron-rebuild.cmd sur Windows)
  3. Allez dans ” node_modules / sqlite3 / lib / binding / ” et renommez le dossier ” electron-v0.36-darwin-x64 ” en ” node- v47 -darwin-x64

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

J’avais le même problème. Tout essayé et atlast 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 créera le dossier “electron-v1.3-win32-x64” dans. \ Node_modules \ sqlite3 \ lib \ binding \ location utilisé par électron pour utiliser sqlite3.

Il suffit de démarrer l’application et vous pourrez utiliser sqlite3 maintenant.

Regardez une réponse similaire 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 

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

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

ps: pendant la reconstruction, n’utilisez pas npm start pour lancer l’application électronique. Sinon, le processus de reconstruction échouerait.

 npm install sqlite3 npm install --save sql.js 

La structure des dossiers devrait être comme

Pour créer une nouvelle firebase database SQLite nommée “db” avec une seule table nommée “test123”, vous pouvez le faire:

 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