Saya ingin mengembangkan aplikasi desktop menggunakan electron yang menggunakan paket sqlite3 yang diinstal melalui npm dengan perintah
npm install --save sqlite3
tetapi memberikan kesalahan berikut di konsol browser elektron
Uncaught Error: Cannot find module 'E:\allcode\eapp\node_modules\sqlite3\lib\binding\node-v45-win32-x64\node_sqlite3.node'
Lingkungan pengembangan saya adalah windows 8.1 x64 node versi 12.7
file package.json saya terlihat seperti ini:
{
"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"
}
}
file 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;
});
});
file 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();
file 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
opsi dapat diberi tag secara andal ke baris pertama (dengan--save-dev electron-builder
), di mananpm install
hanya akan dijalankan sekali?Saya tidak akan merekomendasikan modul sqlite3 node asli. Ini membutuhkan pembangunan kembali untuk bekerja dengan elektron. Ini adalah rasa sakit yang luar biasa untuk dilakukan - Setidaknya saya tidak pernah bisa membuatnya bekerja dan tidak ada instruksi untuk membangun kembali modul pada windows.
Sebagai gantinya, lihat modul 'sql.js' kripken yang merupakan sqlite3 yang telah dikompilasi 100% dalam JavaScript. https://github.com/kripken/sql.js/
sumber
Ada dua aspek yang harus dipertimbangkan di sini:
NODE_PATH
: ini memungkinkan elektron mengetahui di mana menemukan modul Anda (lihat jawaban ini untuk penjelasan lengkap)Dan periksa pertanyaan-pertanyaan berikut, yang menanyakan hal yang sama:
Tip saya adalah mencoba lovefield (oleh Google).
sumber
sqlite3
harus dikompilasi sebelum dapat menggunakannya dalam electron. Apakah saya memahami pertanyaan Anda dengan benar?Saya mengalami masalah yang sama. Mencoba semuanya dan terakhir ini berhasil untuk saya: -
npm install --save sqlite3 npm install --save electron-rebuild npm install --save electron-prebuilt .\node_modules\.bin\electron-rebuild.cmd
Ini akan membuat folder "electron-v1.3-win32-x64" di. \ Node_modules \ sqlite3 \ lib \ binding \ location yang digunakan oleh electron untuk menggunakan sqlite3.
Cukup mulai aplikasi dan Anda akan dapat menggunakan sqlite3 sekarang.
sumber
node_sqlite3.node
file di dalamnyaSolusi yang lebih sederhana:
npm i electron-rebuild --save-dev
./node_modules/.bin/electron-rebuild
(atau.\node_modules\.bin\electron-rebuild.cmd
di windows)PS: v47 adalah versi saya, berhati-hatilah untuk memilih yang bagus (dalam kasus Anda v45 )
sumber
npm install --save sqlite3 npm install --save-dev electron-rebuild
Kemudian, di skrip package.json Anda, tambahkan baris ini:
"scripts": { "postinstall": "electron-rebuild", ... },
Kemudian instal ulang untuk memicu pasca-instal:
npm install
Bekerja dengan sempurna untuk saya dalam kasus penggunaan kompleks yang juga melibatkan pembangun elektron, paket web elektron, dan sekuel.
Ia bekerja dalam mode dev electron-webpack dan dalam mode produksi untuk Windows dan Linux.
sumber
Saya mengalami kesalahan ini juga. Inilah cara saya mengatasinya:
npm install --save-dev electron-rebuild
lalu:./node_modules/.bin/electron-rebuild
dari: https://electronjs.org/docs/tutorial/using-native-node-modules
ps: Saat sedang membangun kembali, jangan gunakan
npm start
untuk memasang aplikasi elektron. Jika tidak, proses pembangunan kembali akan gagal.sumber
Ini berfungsi untuk saya di versi 3 dan 4, sayangnya BUKAN versi 5. Lihat dokumentasi sqlite3 untuk detailnya: https://www.npmjs.com/package/sqlite3#custom-builds-and-electron atau jalankan baris berikut:
npm install sqlite3 --runtime=electron --target=4.0.0 --dist-url=https://atom.io/download/electron
sumber
Lihat jawaban serupa di sini
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
sumber
prepublish
?Anda dapat membuat modul asli secara manual menggunakan visual studio.
Di package.json buat skrip. "scripts": {"postinstall": "install-app-deps"}
lalu jalankan scriptnya.
sumber