Ich möchte eine Desktop-App mit Electron entwickeln , die das über npm installierte sqlite3-Paket mit dem Befehl verwendet
npm install --save sqlite3
In der Elektronenbrowser-Konsole wird jedoch der folgende Fehler angezeigt
Uncaught Error: Cannot find module 'E:\allcode\eapp\node_modules\sqlite3\lib\binding\node-v45-win32-x64\node_sqlite3.node'
Meine Entwicklungsumgebung ist Windows 8.1 x64 Node Version 12.7
Meine package.json- Datei sieht folgendermaßen aus:
{
"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"
}
}
index.js Datei
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;
});
});
my.js Datei
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();
index.html Datei
<!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 zuverlässig in der ersten Zeile (mit--save-dev electron-builder
) markiert werden kann , wonpm install
sie nur einmal ausgeführt werden würde?Ich würde das native Node-SQLite3-Modul nicht empfehlen. Es muss neu aufgebaut werden, um mit Elektronen arbeiten zu können. Dies ist ein gewaltiger Schmerz - zumindest kann ich es nie zum Laufen bringen und es gibt keine Anweisungen zum Neuerstellen von Modulen unter Windows.
Schauen Sie sich stattdessen das Modul 'sql.js' von kripken an, sqlite3, das zu 100% in JavaScript kompiliert wurde. https://github.com/kripken/sql.js/
quelle
Hierbei sind zwei Aspekte zu berücksichtigen:
NODE_PATH
: Hiermit erfahren die Elektronen, wo sich Ihre Module befinden ( eine ausführliche Erklärung finden Sie in dieser Antwort ).Schauen Sie sich die folgenden Fragen an, die dasselbe stellen:
Mein Tipp wäre, Lovefield (von Google) auszuprobieren.
quelle
sqlite3
dies kompiliert werden muss, bevor ich es in Elektronen verwenden kann. Verstehe ich Ihre Frage richtig?Ich hatte das gleiche Problem. Versuchte alles und atlast dies funktionierte für mich: -
Dadurch wird der Ordner "Electron-v1.3-win32-x64" in. \ Node_modules \ sqlite3 \ lib \ binding \ location erstellt, der von Electron zur Verwendung von sqlite3 verwendet wird.
Starten Sie einfach die Anwendung und Sie können jetzt sqlite3 verwenden.
quelle
node_sqlite3.node
Datei darinEine einfachere Lösung:
npm i electron-rebuild --save-dev
./node_modules/.bin/electron-rebuild
(oder.\node_modules\.bin\electron-rebuild.cmd
unter Windows).PS: v47 ist meine Version, achten Sie darauf, die gute zu wählen (in Ihrem Fall v45 )
quelle
Ich stoße auch auf diesen Fehler. So löse ich es:
npm install --save-dev electron-rebuild
dann:./node_modules/.bin/electron-rebuild
von: https://electronjs.org/docs/tutorial/using-native-node-modules
ps: Verwenden Sie während des Wiederaufbaus nicht die
npm start
Lanchierung der Elektronen-App. Andernfalls würde der Wiederherstellungsprozess fehlschlagen.quelle
Es funktioniert für mich in Version 3 und 4, leider NICHT in Version 5. Weitere Informationen finden Sie in der sqlite3-Dokumentation: https://www.npmjs.com/package/sqlite3#custom-builds-and-electron oder führen Sie auf andere Weise die folgende Zeile aus:
npm install sqlite3 --runtime=electron --target=4.0.0 --dist-url=https://atom.io/download/electron
quelle
Fügen Sie dann in den Skripten Ihrer package.json die folgende Zeile hinzu:
Dann einfach neu installieren, um die Nachinstallation auszulösen:
Funktioniert für mich einwandfrei in einem komplexen Anwendungsfall, der auch Electron-Builder, Electron-Webpack und Sequelize umfasst.
Es funktioniert im Dev-Modus von Electron-Webpack und im Produktionsmodus für Windows und Linux.
quelle
Schauen Sie sich hier eine ähnliche Antwort an
TL; DR
quelle
prepublish
sieht das Skript aus?Sie können die nativen Module manuell mit Visual Studio erstellen.
Erstellen Sie in package.json ein Skript. "scripts": {"postinstall": "install-app-deps"}
Führen Sie dann das Skript aus.
quelle