Подтвердить что ты не робот

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

Я хочу создать настольное приложение, используя electron, в котором используется пакет 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 версия 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 файл

<!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>
4b9b3361

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

  • Настройка NODE_PATH: это позволяет электрону узнать, где найти ваши модули (см. этот ответ для подробного объяснения)
  • Сопоставление собственных модулей с электронными заголовками: см. официальный docs

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


Мой совет должен был дать lovefield (от Google) попробовать.

Ответ 4

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

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

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

Ответ 5

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

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.

Ответ 6

Посмотрите аналогичный ответ здесь

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

Ответ 7

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

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

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

Ответ 8

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>

Выход

Ответ 9

Это работает для меня в версиях 3 и 4, к сожалению, НЕ в версии 5. Подробности смотрите в документации sqlite3: https://www.npmjs.com/package/sqlite3#custom-builds-and-electron или иным образом запустите следующую строку: npm install sqlite3 --runtime=electron --target=4.0.0 --dist-url=https://atom.io/download/electron