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>
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.
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/
Deux aspects sont à considérer ici:
NODE_PATH
: ceci permet à électron de savoir où trouver vos modules (voir cette réponse pour une explication détaillée)Et vérifiez les questions suivantes, qui demandent la même chose:
Mon conseil serait d'essayer lovefield (de Google).
Une solution plus simple:
npm i electron-rebuild --save-dev
./node_modules/.bin/electron-rebuild
(ou .\node_modules\.bin\electron-rebuild.cmd
sur Windows)PS: v47 est ma version, veillez à choisir la bonne (dans votre cas v45 )
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.
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.
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
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