I want to develop desktop app using electron that uses sqlite3 package installed via npm with the command
npm install --save sqlite3
but it gives the following error in electron browser console
Uncaught Error: Cannot find module 'E:\allcode\eapp\node_modules\sqlite3\lib\binding\node-v45-win32-x64\node_sqlite3.node'
My development environment is windows 8.1 x64 node version 12.7
my package.json file looks like this:
{ "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 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 file
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
<!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>
Start the sqlite3 program by typing "sqlite3" at the command prompt, optionally followed by the name the file that holds the SQLite database (or ZIP archive). If the named file does not exist, a new database file with the given name will be created automatically.
By far the easiest way to use SQLite with electron is with electron-builder
.
First, add a postinstall step in your package.json:
"scripts": { "postinstall": "install-app-deps" ... }
and then install the necessary dependencies and build:
npm install --save-dev electron-builder npm install --save sqlite3 npm run postinstall
electron-builder will build the native module for your platform, with the correct name for the Electron binding; and you can then require
it in code as normal.
See my github repo and blog post - it took me quite a while to figure this out too.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With