Как использовать модуль sqlite3 с электроном?

Я хочу разработать настольное приложение с помощью электрона, который использует пакет sqlite3, установленный через npm с помощью команды

npm install --save sqlite3 

но он дает следующую ошибку в консоли электронного браузера

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

Моя среда разработки – это Windows 8.1 x64 node version 12.7

мой файл package.json выглядит следующим образом:

 { "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

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

Файл index.html

        

Hello

<!---->

Самым простым способом использования SQLite с электроном является electron-builder .

Сначала добавьте шаг postinstall в свой пакет package.json:

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

а затем установите необходимые зависимости и выполните сборку:

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

электрон-строитель будет строить собственный модуль для вашей платформы, с правильным именем для привязки электрона; и вы можете require его в коде как обычно.

См. Мой репортаж github и сообщение в блоге – мне потребовалось некоторое время, чтобы понять это.

Я бы не рекомендовал модуль sqlite3 собственного узла. Это требует перестройки для работы с электроном. Это огромная боль, которую нужно сделать – по крайней мере, я не могу заставить ее работать, а у них нет инструкций по восстановлению модhive на windowsх.

Вместо этого посмотрите на модуль sql.js kripken, который является sqlite3, который был скомпилирован на 100% в JavaScript. https://github.com/kripken/sql.js/

Здесь должны быть рассмотрены два аспекта:

  1. Установка NODE_PATH : это позволяет электрону узнать, где найти ваши модули (см. Этот ответ для подробного объяснения)
  2. Компиляция собственных модhive против электронных заголовков: см. Официальные документы

И проверьте следующие вопросы, которые задают одно и то же:

  • Электронное приложение с базой данных
  • Использование плагинов NodeJS в Elelectron

Моей подсказкой было бы дать Lovefield (от Google) попробовать.

Более простое решение:

  1. Установка электронной перестройки npm i electron-rebuild --save-dev
  2. Запустите электрон-rebuild ./node_modules/.bin/electron-rebuild (или .\node_modules\.bin\electron-rebuild.cmd в windowsх)
  3. Перейдите в « node_modules / sqlite3 / lib / binding / » и переименуйте папку « электрон-v0.36-darwin-x64 » в « node- v47 -darwin-x64 »

PS: v47 – моя версия, будьте осторожны, чтобы выбрать хороший (в вашем случае v45 )

У меня была такая же проблема. Пробовал все и продолжал это для меня:

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

Это создаст папку «электрон-v1.3-win32-x64» в. \ Node_modules \ sqlite3 \ lib \ binding \ location, которая используется электроном для использования sqlite3.

Просто запустите приложение, и теперь вы сможете использовать sqlite3.

Взгляните на аналогичный ответ здесь

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 

Я тоже сталкиваюсь с этой ошибкой. Вот как я его npm install --save-dev electron-rebuild : npm install --save-dev electron-rebuild then: ./node_modules/.bin/electron-rebuild

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

ps: Пока он находится на перестройке, не используйте npm start чтобы помещать электронное приложение. В противном случае процесс восстановления завершится неудачно.

 npm install sqlite3 npm install --save sql.js 

Структура папок должна быть похожа

Чтобы создать новую базу данных SQLite с именем «db» с одной таблицей с именем «test123», вы можете сделать следующее:

 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> 

Вывод

Interesting Posts

Как вызвать метод пользовательского интерфейса из другого streamа

Запуск служб в пакетном файле на окнах 7

Как я могу сделать ComboBox недоступным для редактирования в .NET?

Почему возникает ArrayIndexOutOfBoundsException и как его избежать в Android?

Excel: сочетание клавиш для перемещения (своп) столбца влево или вправо?

Как создать случайное число в Bash?

Объявление указателей; звездочку слева или справа от пространства между типом и именем?

Outlook: применить правила к текущему сообщению?

Альтернатива методу FindMimeFromData в Urlmon.dll, который имеет больше типов MIME

Удаление пробела в множителе gnuplot

Поиск k-го наименьшего числа из n отсортированных массивов

Каково точное использование MAC-адреса?

Введите символ «&» в текстовую метку в Windows Forms?

Указание порядка для junit 4 тестов на уровне метода (не уровне classа)

Центр обновления Windows уничтожает мое интернет-соединение

Давайте будем гением компьютера.