Sqlite3 modülü elektron ile nasıl kullanılır?


91

Şu komutla npm aracılığıyla yüklenen sqlite3 paketini kullanan elektron kullanarak masaüstü uygulaması geliştirmek istiyorum

npm install --save sqlite3

ancak elektron tarayıcı konsolunda aşağıdaki hatayı veriyor

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

Geliştirme ortamım Windows 8.1 x64 düğüm sürümü 12.7

Benim package.json dosyası şöyle görünür:

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

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 dosyası

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 dosyası

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

Yanıtlar:


126

SQLite'ı elektronla kullanmanın açık ara en kolay yolu ile electron-builder.

Önce, package.json dosyanıza bir yükleme sonrası adımı ekleyin:

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

ve ardından gerekli bağımlılıkları kurun ve oluşturun:

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

Elektron oluşturucu, Elektron bağlama için doğru adla platformunuz için yerel modülü oluşturacaktır; ve daha sonra requirebunu normal şekilde kodla yapabilirsiniz .

Benim Bkz github repo ve blog yazısı - çok bu anlamaya bana oldukça zaman aldı.


1
Senin kullanma elektron Demirbaş-sqlite gerçekten kolay bir yöntemdir, fakatnpm install
Bernardo Ramos

1
'npm run postinstall' komutunu çalıştırdığımda, "Projeleri bu çözümde birer birer derleme. Paralel derlemeyi etkinleştirmek için lütfen" / m "anahtarını ekleyin." hatasını aldım.
2018

Bu, derimi bir değil, şimdiye kadar iki kez kurtardı!
John Nesbitt

--save sqlite3Seçeneğin güvenilir bir şekilde ilk satıra (ile --save-dev electron-builder) etiketlenip etiketlenemeyeceğini bilen var mı, npm installyalnızca bir kez nerede çalıştırılır?
Phillip

Bu benim için çalışmıyor, "../../nan/nan_object_wrap.h:67:18 gibi hatalar alıyorum: hata: 'class Nan :: Persistent <v8 :: Object>' 'MarkIndependent' adında bir üye içermiyor `
Michael

21

Yerel düğüm sqlite3 modülünü önermem. Elektronla çalışmak için yeniden inşa edilmesi gerekiyor. Bu çok büyük bir acı - En azından onu asla çalıştıramıyorum ve pencerelerde modülleri yeniden inşa etmek için talimatları yok.

Bunun yerine, JavaScript'te% 100 derlenmiş sqlite3 olan kripken'in 'sql.js' modülüne bir göz atın. https://github.com/kripken/sql.js/


3
Electron dokümanları, paketlenmiş yerel modülleri kullanmak için elektronla çalışmak için onları yeniden oluşturmanız gerektiği konusunda oldukça açıktır. Ya çoğu zaman çalışan elektron yeniden oluşturma yardımcı programını kullanın ya da alçı bayraklarını manuel olarak ayarlayın: elektron.atom.io/docs/tutorial/using-native-node-modules
Bret

1
Yavaş yanıt için özür dilerim. github.com/electron/electron-rebuild , geliştirmede yeniden inşa etmek için kullanışlı bir araçtır. github.com/electron-userland/electron-builder/wiki/… üretim yapıları için çoklu platform oluşturma stratejisini açıklar. Unutmayın, yerel dağıtımları bir kez sunduğunuzda, farklı işletim sistemleri için çapraz derleme yeteneğinizi kaybedersiniz. github.com/nodejs/node-gyp#installation , gerekli Windows derleyici araçları hakkında iyi belgelere sahiptir.
Bret

1
bu yorumların hiçbiri bu cevapla alakalı değil!
user3791372

14
Sql.js'nin dosya sistemi üzerinde çalışamayacağı belirtilmelidir. Veritabanını her değiştirmeniz gerektiğinde, her şeyi diske yazmanız gerekir. Çoğu senaryo için neredeyse işe yaramaz hale getiriyor.
mode777

3
sql.js daha çok bir oyuncak gibi, eğlence için yapılmış. NeDB ve diğer nosql veritabanlarından daha iyi olamaz çünkü tüm veritabanını bellekte depolar. Yani onu kullanmak için iyi bir sebep yok. Küçük veritabanları için NeDB gibi nosql kullanın, daha büyük için sqlite derlemeniz gerekir
Daimos

10

Burada iki husus dikkate alınmalıdır:

  1. Ayar NODE_PATH: bu, elektronun modüllerinizi nerede bulacağını bilmesini sağlar ( ayrıntılı bir açıklama için bu yanıta bakın )
  2. Yerel modülleri elektron başlıklarına göre derleme: resmi belgelere bakın

Ve aynı şeyi soran aşağıdaki soruları kontrol edin:


Benim tavsiyem , lovefield'ı (Google'dan) bir denemektir.


Nodewebkit'te sqlite'ı derlemeliyim. Aynı kural elektron için de geçerli mi?
Wexoni

@Wexoni AFAIK yerel bağlamalara sahip her düğüm modülü elektron başlıklarına göre derlenmelidir.
Yan Fotoğraf

1
@Wexoni NW ile çalışmadım ama sqlite3elektronda kullanmadan önce derlenmesi gerektiğini biliyorum . Sorunuzu doğru anlıyor muyum?
Yan Fotoğraf

1
@YannBertrand hala kendi başlıklarını kullanıyorlar. Sanırım yine de başlıklarına göre derlemeniz gerekecek.
Yan Foto

1
Bahşişiniz için teşekkürler lovefield. Gerçekten harika bir kütüphane.
Mostasim Billah

7

Ben de aynı sorunu yaşıyordum. Her şeyi denedim ve en sonunda bu benim için çalıştı: -

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

Bu, sqlite3'ü kullanmak için elektron tarafından kullanılan. \ Node_modules \ sqlite3 \ lib \ binding \ location içinde "elektron-v1.3-win32-x64" klasörünü oluşturacaktır.

Sadece uygulamayı başlatın ve şimdi sqlite3'ü kullanabilirsiniz.


Az önce boş bir klasör oluşturdu, ancak içinde hala node_sqlite3.nodedosya yok
Mehdi Dehghani

elektron önceden oluşturulmuş elektron olarak yeniden adlandırıldı. Daha fazla ayrıntı için, elektron.atom.io/blog/2016/08/16/npm-install-electron
Jacob Nelson

6

Daha basit bir çözüm:

  1. Elektron yeniden yapılandırmayı yükleyin npm i electron-rebuild --save-dev
  2. Elektron yeniden yapılandırmayı başlatın ./node_modules/.bin/electron-rebuild(veya .\node_modules\.bin\electron-rebuild.cmdpencerelerde)
  3. "Git node_modules / Sqlite3 / lib / / bağlayıcı " ve klasörü "adlandırmak elektron v0.36-darwin-x64 " ile " nod V47 -darwin-x64 "

Not: v47 benim sürümüm , iyi olanı seçerken dikkatli olun (sizin durumunuzda v45 )


4
Üçüncü adımı açıklayabilir misin? Neden yeniden adlandırılmalı?
m4heshd

4
npm install --save sqlite3
npm install --save-dev electron-rebuild

Ardından, package.json dosyanızın komut dosyalarında şu satırı ekleyin:

"scripts": {
  "postinstall": "electron-rebuild",
  ...
},

Ardından, yükleme sonrasını tetiklemek için yeniden yükleyin:

npm install

Elektron oluşturucu, elektron web paketi ve devamı içeren karmaşık bir kullanım durumunda benim için kusursuz çalışıyor.

Electron-webpack'in geliştirme modunda ve hem Windows hem de Linux için üretim modunda çalışır.


3

Ben de bu hatayla karşılaşıyorum. İşte nasıl çözdüğüm: npm install --save-dev electron-rebuild o zaman: ./node_modules/.bin/electron-rebuild

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

ps: Yeniden inşa edilirken npm start, elektron uygulamasını kullanmak için kullanmayın . Aksi takdirde yeniden oluşturma işlemi başarısız olur.



2

Buradaki benzer cevaba bir göz atın

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

3
senaryo prepublishneye benziyor?
Victor Ivens

0

Görsel stüdyoyu kullanarak yerel modülleri manuel olarak oluşturabilirsiniz.

  1. Visual Studio 2019'u indirin.
  2. "C ++ ile masaüstü geliştirme" paketini kurun. Yükleme ayrıntıları sekmesinde "MSVC v140 - VS 2015 C ++ oluşturma araçları (v14.00)" öğesini seçin
  3. Elektron oluşturucuyu projenize indirin.
  4. Package.json'da bir komut dosyası oluşturun. "scripts": {"postinstall": "install-app-deps"}

  5. ardından komut dosyasını çalıştırın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.