web-dev-qa-db-fra.com

Comment utiliser le module sqlite3 avec electron?

Je souhaite développer une application de bureau à l'aide de electron utilisant le paquetage sqlite3 installé via npm à l'aide de la commande

npm install --save sqlite3

mais cela donne l'erreur suivante dans la console du navigateur electron

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 noeud 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

<!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>
66
manas

Le moyen le plus simple d'utiliser SQLite avec electron consiste à utiliser electron-builder.

Premièrement, ajoutez une étape de post-installation dans votre package.json:

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

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

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

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

Voir mon github repo et article de blog - il m'a fallu un certain temps pour comprendre cela aussi.

95
Steve Melia

Je ne recommanderais pas le module de nœud natif sqlite3. Cela nécessite d'être reconstruit pour fonctionner avec electron. C'est une douleur énorme à faire - Au moins, je ne peux jamais le faire fonctionner et leurs instructions non pour reconstruire les modules sur Windows.

Jetez plutôt 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/

17
Joue Bien

Deux aspects sont à considérer ici:

  1. Réglage de NODE_PATH: ceci permet à électron de savoir où trouver vos modules (voir cette réponse pour une explication détaillée)
  2. Compilation de modules natifs contre les en-têtes d’électrons: voir official docs

Et vérifiez les questions suivantes, qui demandent la même chose:


Mon conseil serait d'essayer lovefield (de Google).

8
Yan Foto

Une solution plus simple:

  1. Installer la reconstruction électronique npm i electron-rebuild --save-dev
  2. Lancer la reconstruction électronique ./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 la bonne (dans votre cas v45 )

6
Fabien Sa

J'avais le même problème. J'ai tout essayé et 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 un dossier "electron-v1.3-win32-x64" dans.\Node_modules\sqlite3\lib\binding\location utilisé par electron pour utiliser sqlite3.

Lancez simplement l'application et vous pourrez utiliser sqlite3 maintenant.

6
Rj-s

Je rencontre aussi cette erreur. 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.

3
valleygtc

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
2
smkndblvr

Cela fonctionne pour moi dans les versions 3 et 4, malheureusement PAS dans la version 5. Consultez la documentation de sqlite3 pour plus de détails: https://www.npmjs.com/package/sqlite3#custom-builds-and-electron ou sinon, exécutez la ligne suivante: npm install sqlite3 --runtime=electron --target=4.0.0 --dist-url=https://atom.io/download/electron

0
Sailab Rahi