Chcę opracować aplikację desktopową przy użyciu electron, która używa pakietu sqlite3 zainstalowanego przez npm za pomocą polecenia
npm install --save sqlite3
ale daje następujący błąd w konsoli przeglądarki electron
Uncaught Error: Cannot find module 'E:\allcode\eapp\node_modules\sqlite3\lib\binding\node-v45-win32-x64\node_sqlite3.node'
Moje środowisko programistyczne to Windows 8.1 x64 node w wersji 12.7
mój plik package.json wygląda następująco:
{
"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"
}
}
plik 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;
});
});
plik 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();
plik 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
opcję można niezawodnie oznaczyć w pierwszej linii (z--save-dev electron-builder
), gdzienpm install
byłaby uruchomiona tylko raz?Nie polecam natywnego modułu sqlite3 węzła. Wymaga przebudowy do pracy z elektronem. To ogromny problem - przynajmniej nigdy nie mogę go uruchomić, a ich brak instrukcji dotyczących przebudowy modułów w systemie Windows.
Zamiast tego spójrz na moduł 'sql.js' kripkena, który jest sqlite3, który został skompilowany w 100% w JavaScript. https://github.com/kripken/sql.js/
źródło
Należy tutaj wziąć pod uwagę dwa aspekty:
NODE_PATH
: to pozwala elektronowi wiedzieć, gdzie znaleźć twoje moduły (zobacz tę odpowiedź, aby uzyskać szczegółowe wyjaśnienie)I sprawdź następujące pytania, które zadają to samo:
Moja wskazówka to wypróbowanie Lovefield (od Google).
źródło
sqlite3
trzeba to skompilować, zanim będę mógł użyć go w elektronie. Czy dobrze rozumiem twoje pytanie?Miałem ten sam problem. Wypróbowałem wszystko i przynajmniej to zadziałało: -
npm install --save sqlite3 npm install --save electron-rebuild npm install --save electron-prebuilt .\node_modules\.bin\electron-rebuild.cmd
Spowoduje to utworzenie folderu „electron-v1.3-win32-x64” w. \ Node_modules \ sqlite3 \ lib \ binding \ location, który jest używany przez electron do używania sqlite3.
Po prostu uruchom aplikację i będziesz mógł już korzystać z sqlite3.
źródło
node_sqlite3.node
w nim plikuProstsze rozwiązanie:
npm i electron-rebuild --save-dev
./node_modules/.bin/electron-rebuild
(lub.\node_modules\.bin\electron-rebuild.cmd
w systemie Windows)PS: v47 to moja wersja, uważaj, aby wybrać dobrą (w twoim przypadku v45 )
źródło
Ja też napotykam ten błąd. Oto jak to rozwiązać:
npm install --save-dev electron-rebuild
wtedy:./node_modules/.bin/electron-rebuild
od: https://electronjs.org/docs/tutorial/using-native-node-modules
ps: Podczas przebudowy nie używaj
npm start
do lanchowania aplikacji electron. W przeciwnym razie proces odbudowy nie powiedzie się.źródło
Działa dla mnie w wersji 3 i 4, niestety NIE w wersji 5. Szczegółowe informacje można znaleźć w dokumentacji sqlite3: https://www.npmjs.com/package/sqlite3#custom-builds-and-electron lub w inny sposób uruchomić następującą linię:
npm install sqlite3 --runtime=electron --target=4.0.0 --dist-url=https://atom.io/download/electron
źródło
npm install --save sqlite3 npm install --save-dev electron-rebuild
Następnie w skryptach pliku package.json dodaj tę linię:
"scripts": { "postinstall": "electron-rebuild", ... },
Następnie po prostu zainstaluj ponownie, aby uruchomić po instalacji:
npm install
Działa bezbłędnie dla mnie w złożonym przypadku użycia również obejmującym tworzenie elektronów, paczkę elektronów i sequelize.
Działa w trybie deweloperskim electron-webpack oraz w trybie produkcyjnym dla systemów Windows i Linux.
źródło
Spójrz na podobną odpowiedź tutaj
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
źródło
prepublish
wygląda skrypt ?Możesz ręcznie tworzyć natywne moduły za pomocą programu Visual Studio.
W package.json utwórz skrypt. "scripts": {"postinstall": "install-app-deps"}
następnie uruchom skrypt.
źródło