Je souhaite développer une application de bureau en utilisant electron qui utilise le package sqlite3 installé via npm avec la commande
npm install --save sqlite3
mais cela donne l'erreur suivante dans la console du navigateur électronique
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
<!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>
npm install
--save sqlite3
option peut être étiquetée de manière fiable sur la première ligne (avec--save-dev electron-builder
), oùnpm install
ne serait exécutée qu'une seule fois?Je ne recommanderais pas le module sqlite3 du nœud natif. Il faut être reconstruit pour travailler avec l'électron. C'est une douleur énorme à faire - Au moins, je ne peux jamais le faire fonctionner et leurs instructions ne sont pas pour reconstruire des modules sur Windows.
Jetez plutôt un œil au module 'sql.js' de kripken qui est sqlite3 qui a été compilé à 100% en JavaScript. https://github.com/kripken/sql.js/
la source
Deux aspects sont à considérer ici:
NODE_PATH
: cela permet à electron de savoir où trouver vos modules cette réponse pour une explication approfondie)Et vérifiez les questions suivantes, qui posent la même chose:
Mon conseil serait d' essayer lovefield (par Google).
la source
sqlite3
doit être compilé avant de pouvoir l'utiliser en électron. Ai-je bien compris votre question?J'avais le même problème. J'ai tout essayé et enfin 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 qui est utilisé par electron pour utiliser sqlite3.
Démarrez simplement l'application et vous pourrez utiliser sqlite3 maintenant.
la source
node_sqlite3.node
fichier dedansUne solution plus simple:
npm i electron-rebuild --save-dev
./node_modules/.bin/electron-rebuild
(ou.\node_modules\.bin\electron-rebuild.cmd
sur Windows)PS: la v47 est ma version, attention à bien choisir la bonne (dans votre cas v45 )
la source
Je rencontre aussi cette erreur. Voici comment je le résous:
npm install --save-dev electron-rebuild
alors:./node_modules/.bin/electron-rebuild
depuis: https://electronjs.org/docs/tutorial/using-native-node-modules
ps: Pendant la reconstruction, ne l'utilisez pas
npm start
pour lanchir l'application d'électrons. Sinon, le processus de reconstruction échouerait.la source
Cela fonctionne pour moi dans les versions 3 et 4, malheureusement PAS la version 5. Voir la documentation sqlite3 pour plus de détails: https://www.npmjs.com/package/sqlite3#custom-builds-and-electron ou exécutez la ligne suivante:
npm install sqlite3 --runtime=electron --target=4.0.0 --dist-url=https://atom.io/download/electron
la source
npm install --save sqlite3 npm install --save-dev electron-rebuild
Ensuite, dans les scripts de votre package.json, ajoutez cette ligne:
"scripts": { "postinstall": "electron-rebuild", ... },
Ensuite, réinstallez simplement pour déclencher la post-installation:
npm install
Fonctionne parfaitement pour moi dans un cas d'utilisation complexe impliquant également électron-builder, électron-webpack et sequelize.
Il fonctionne en mode développement d'electron-webpack et en mode production pour Windows et Linux.
la source
Jetez un œil à 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
la source
prepublish
ressemble le script ?Vous pouvez créer manuellement les modules natifs à l'aide de Visual Studio.
Dans package.json, créez un script. "scripts": {"postinstall": "install-app-deps"}
puis exécutez le script.
la source