Come usare il modulo sqlite3 con l’elettrone?

Voglio sviluppare app desktop usando l’ elettrone che usa il pacchetto sqlite3 installato tramite npm con il comando

npm install --save sqlite3 

ma dà il seguente errore nella console del browser electron

 Uncaught Error: Cannot find module 'E:\allcode\eapp\node_modules\sqlite3\lib\binding\node-v45-win32-x64\node_sqlite3.node' 

Il mio ambiente di sviluppo è Windows 8.1 x64 node versione 12.7

il mio file package.json assomiglia a questo:

 { "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(); 

index.html file

        

Hello

<!---->

Di gran lunga il modo più semplice per usare SQLite con l’elettrone è con il electron-builder .

Innanzitutto, aggiungi un passaggio postinstall nel tuo pacchetto.json:

 "scripts": { "postinstall": "install-app-deps" ... } 

e quindi installare le dipendenze necessarie e compilare:

 npm install --save-dev electron-builder npm install --save sqlite3 npm run postinstall 

electron-builder costruirà il modulo nativo per la tua piattaforma, con il nome corretto per il binding di Electron; e puoi quindi require in codice normalmente.

Vedi il mio repository Github e il post sul blog – mi ci è voluto un po ‘per capire anche questo.

Non consiglierei il modulo sqlite3 del nodo nativo. Richiede di essere ricostruito per funzionare con l’elettrone. Questo è un dolore enorme da fare – Almeno non riesco mai a farlo funzionare e non ci sono istruzioni per ribuild i moduli su Windows.

Date un’occhiata al modulo “sql.js” di kripken che è sqlite3 che è stato compilato al 100% in JavaScript. https://github.com/kripken/sql.js/

Due aspetti devono essere considerati qui:

  1. Impostazione di NODE_PATH : questo consente a electron di sapere dove trovare i tuoi moduli (vedi questa risposta per una spiegazione esauriente)
  2. Compilazione di moduli nativi contro intestazioni di elettroni: vedere documenti ufficiali

E controlla le seguenti domande, che chiedono la stessa cosa:

  • App Electron con database
  • Utilizzo dei plug-in NodeJS in Elelectron

Il mio consiglio sarebbe di dare una prova a Lovefield (di Google).

Una soluzione più semplice:

  1. Install electron-rebuild npm i electron-rebuild --save-dev
  2. Avvia electron-rebuild ./node_modules/.bin/electron-rebuild (oppure .\node_modules\.bin\electron-rebuild.cmd su windows)
  3. Vai su ” node_modules / sqlite3 / lib / binding / ” e rinomina la cartella ” electron-v0.36-darwin-x64 ” in ” node- v47 -darwin-x64

PS: v47 è la mia versione, fai attenzione a scegliere quella buona (nel tuo caso v45 )

Stavo avendo lo stesso problema. Ho provato tutto e almeno questo ha funzionato per me: –

 npm install --save sqlite3 npm install --save electron-rebuild npm install --save electron-prebuilt .\node_modules\.bin\electron-rebuild.cmd 

Questo creerà la cartella “electron-v1.3-win32-x64” in. \ Node_modules \ sqlite3 \ lib \ binding \ location che viene usata da electron per usare sqlite3.

Basta avviare l’applicazione e ora potrai usare sqlite3.

Dai un’occhiata a una risposta simile qui

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 

Incontro anche questo errore. Ecco come lo npm install --save-dev electron-rebuild : npm install --save-dev electron-rebuild quindi: ./node_modules/.bin/electron-rebuild

da: https://electronjs.org/docs/tutorial/using-native-node-modules

ps: Mentre è in fase di ricostruzione, non usare npm start per lanciare l’app electron. Altrimenti il ​​processo di ricostruzione fallirebbe.

 npm install sqlite3 npm install --save sql.js 

La struttura delle cartelle dovrebbe essere come

Per creare un nuovo database SQLite chiamato “db” con una singola tabella denominata “test123”, potresti fare questo:

 SQLite version 3.11.0 2016-02-15 17:29:24 Enter ".help" for usage hints. sqlite> create table test123(id int,fname varchar(20), lname varchar(20)); sqlite> insert into test123 values(1,'lalit','tyagi'); sqlite> insert into test123 values(2,'vineet','tyagi'); sqlite> insert into test123 values(3,'nihal','jumhare'); sqlite> insert into test123 values(4,'mandip','gothadiya'); sqlite> insert into test123 values(5,'jaggu','mohan'); sqlite> select *from test123; 1|lalit|tyagi 2|vineet|tyagi 3|nihal|jumhare 4|mandip|gothadiya 5|jaggu|mohan sqlite> 

Produzione