2015-09-10 20 views
34

voglio sviluppare un'applicazione desktop utilizzando electron che utilizza il pacchetto sqlite3 installato tramite NPM con il comandoCome usare il modulo sqlite3 con l'elettrone?

npm install --save sqlite3 

ma dà il seguente errore nella console del browser di elettroni

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 è di Windows 8.1 x64 versione nodo 12.7

my package.json file assomigliare 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" 
    } 
} 

index.js del file

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

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> 

risposta

6

due aspetti sono da considerare qui:

  1. impostazione NODE_PATH: questo permette di elettroni sa dove trovare i moduli (vedere this answer per una spiegazione approfondita)
  2. Compilazione moduli nativi contro le intestazioni di elettroni: vedi Gazzetta docs

e nella verifica alle seguenti domande, che chiedono la stessa cosa:


Il mio consiglio sarebbe quello di dare lovefield (by Google) una prova.

+0

In Nodewebkit , Devo compilare lo sqlite. La stessa regola si applica per l'elettrone? –

+0

@Wexoni AFAIK ogni modulo nodo con collegamenti nativi deve essere compilato contro le intestazioni di elettroni. –

+0

Perdona la mia ignoranza, ma per come la capisco ... vale la stessa regola per Electron e per NW? –

6

Una soluzione più semplice:

  1. Installare elettrone-rebuild npm i electron-rebuild --save-dev
  2. lancio di elettroni ricostruire ./node_modules/.bin/electron-rebuild (o .\node_modules\.bin\electron-rebuild.cmd su Windows)
  3. Vai a "node_modules/sqlite3/lib/binding/" e rinominare la cartella "electron-v0.36-darwin-x64 "a" node- V47 -Darwin-x64 "

PS: v47 è la mia versione, fare attenzione a scegliere quello buono (nel tuo caso V45)

2

Dai un'occhiata alla risposta simile here

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 
+2

come appare lo script 'prepublish'? –

5

Avevo lo stesso problema. Provato di tutto e atlast 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à cartella "elettrone-v1.3-win32-x64" in \ node_modules \ sqlite3 \ lib \ vincolante \ posizione che viene utilizzato da elettrone. usa sqlite3.

Basta avviare l'applicazione e sarete in grado di utilizzare sqlite3 ora.

+0

Ha appena creato una cartella vuota, ma ancora nessun file 'node_sqlite3.node' in esso –

9

Non consiglierei il modulo nativo sqlite3. 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 ricostruire i moduli su Windows.

Invece date un'occhiata al modulo "sql.js" di kripken che è sqlite3 che è stato compilato al 100% in JavaScript. https://github.com/kripken/sql.js/

+1

I documenti Electron sono abbastanza chiari che per utilizzare i moduli nativi in ​​bundle, è necessario ricostruirli per poter lavorare con l'elettrone. Utilizza l'utilità di ricostruzione elettronica che funziona la maggior parte del tempo o imposta manualmente i flag gyp: http://electron.atom.io/docs/tutorial/using-native-node-modules/ – Bret

+0

compagno se puoi indicarmi la direzione della versione di Windows della documentazione di ricostruzione insieme a come ottenere il builder collegato al compilatore VS che sarebbe grato. Così com'è, non riesco a trovare alcuna documentazione esistente, facile da trovare o facile da seguire. –

+1

Ci scusiamo per la risposta lenta. https://github.com/electron/electron-rebuild è uno strumento utile per la ricostruzione in fase di sviluppo. https://github.com/electron-userland/electron-builder/wiki/Multi-Platform-Build descrive una strategia di build multipiattaforma per le build di produzione. Ricorda, una volta introdotti i deps nativi, perdi la possibilità di eseguire la compilazione incrociata per diversi SO. https://github.com/nodejs/node-gyp#installation ha documenti decenti sugli strumenti necessari per il compilatore di Windows. – Bret

43

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

In primo luogo, aggiungere un passaggio postinstall nella vostra package.json:

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

e poi installare le dipendenze necessarie e costruire:

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

elettrone-costruttore costruirà il modulo nativo per la piattaforma , con il nome corretto per il legame di elettroni; e puoi quindi require in codice come di consueto.

Vedere il mio github repo e blog post - mi ci è voluto un po 'per capire anche questo.

+0

Usando il tuo [electron-boilerplate-sqlite] (https://github.com/sjmelia/electron-boilerplate-sqlite) è davvero il metodo più facile, ma con 'npm install' –

0
npm install sqlite3 

npm install --save sql.js 

Folder structure should be like

Per creare un nuovo database SQLite denominato "db" con un solo tabella denominata "test123", si potrebbe 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> 

Output

+0

Questo non è rilevante per l'elettrone. – mrm