node.js - nwjs - ¿Cómo utilizar el módulo sqlite3 con electrón?
nwjs sqlite3 (8)
Quiero desarrollar una aplicación de escritorio usando electron que use el paquete sqlite3 instalado a través de npm con el comando
npm install --save sqlite3
pero da el siguiente error en la consola del navegador de electrones
Uncaught Error: Cannot find module ''E:/allcode/eapp/node_modules/sqlite3/lib/binding/node-v45-win32-x64/node_sqlite3.node''
Mi entorno de desarrollo es Windows 8.1 x64 nodo versión 12.7
mi archivo package.json se ve así:
{
"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"
}
}
archivo 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;
});
});
archivo 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();
archivo 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>
Aquí se deben considerar dos aspectos:
-
Configuración
NODE_PATH
: esto le permite a los electrones saber dónde encontrar sus módulos (vea esta respuesta para una explicación detallada) - Compilación de módulos nativos contra encabezados de electrones: ver docs oficiales
Y revisa las siguientes preguntas, que hacen lo mismo:
Mi consejo sería lovefield (de Google).
Con mucho, la forma más fácil de usar SQLite con electron es con
electron-builder
.
Primero, agregue un paso posterior a la instalación en su package.json:
"scripts": {
"postinstall": "install-app-deps"
...
}
y luego instale las dependencias necesarias y compile:
npm install --save-dev electron-builder
npm install --save sqlite3
npm run postinstall
electron-builder construirá el módulo nativo para su plataforma, con el nombre correcto para el enlace Electron;
y luego puede
require
en el código normalmente.
Vea mi repositorio de github y la publicación del blog : también me llevó bastante tiempo resolver esto.
Echa un vistazo a una respuesta similar 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
Estaba teniendo el mismo problema Intenté todo y finalmente esto funcionó para mí:
npm install --save sqlite3
npm install --save electron-rebuild
npm install --save electron-prebuilt
./node_modules/.bin/electron-rebuild.cmd
Esto creará la carpeta "electron-v1.3-win32-x64" en. / Node_modules / sqlite3 / lib / binding / location que es utilizada por electron para usar sqlite3.
Simplemente inicie la aplicación y podrá utilizar sqlite3 ahora.
Funciona para mí en las versiones 3 y 4, desafortunadamente NO en la versión 5. Consulte la documentación de sqlite3 para obtener más detalles:
https://www.npmjs.com/package/sqlite3#custom-builds-and-electron
o ejecute la siguiente línea:
npm install sqlite3 --runtime=electron --target=4.0.0 --dist-url=https://atom.io/download/electron
Me encuentro con este error también.
Así es como lo
npm install --save-dev electron-rebuild
:
npm install --save-dev electron-rebuild
luego:
./node_modules/.bin/electron-rebuild
de: https://electronjs.org/docs/tutorial/using-native-node-modules
pd: Mientras está en reconstrucción, no uses
npm start
para lanzar la aplicación de electrones.
De lo contrario, el proceso de reconstrucción fallaría.
No recomendaría el módulo de nodo nativo sqlite3. Requiere ser reconstruido para trabajar con electrones. Es una tarea enorme: al menos nunca puedo hacer que funcione y no hay instrucciones para reconstruir módulos en Windows.
En cambio, eche un vistazo al módulo ''sql.js'' de kripken que es sqlite3 que se ha compilado al 100% en JavaScript. https://github.com/kripken/sql.js/
Una solución más simple:
-
Instalar electron-rebuild
npm i electron-rebuild --save-dev
-
Inicie electron-rebuild
./node_modules/.bin/electron-rebuild
(o./node_modules/.bin/electron-rebuild.cmd
en Windows) - Vaya a " node_modules / sqlite3 / lib / binding / " y cambie el nombre de la carpeta " electron-v0.36-darwin-x64 " a " node- v47 -darwin-x64 "
PD: v47 es mi versión, tenga cuidado de elegir la buena (en su caso v45 )