इलेक्ट्रॉन के साथ sqlite3 मॉड्यूल का उपयोग कैसे करें?


91

मैं इलेक्ट्रॉनों का उपयोग करके डेस्कटॉप ऐप विकसित करना चाहता हूं जो कमांड के साथ npm के माध्यम से स्थापित sqlite3 पैकेज का उपयोग करता है

npm install --save sqlite3

लेकिन यह इलेक्ट्रॉन ब्राउज़र कंसोल में निम्न त्रुटि देता है

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

मेरे विकास का वातावरण विंडोज़ 8.1 x64 नोड संस्करण 12.7 है

मेरा पैकेज.जॉन फ़ाइल इस तरह दिखता है:

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

जवाबों:


126

अब तक इलेक्ट्रॉन के साथ SQLite का उपयोग करने का सबसे आसान तरीका है electron-builder

सबसे पहले, अपने package.json में एक पोस्ट स्थापना कदम जोड़ें:

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

और फिर आवश्यक निर्भरताएं स्थापित करें और निर्माण करें:

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

इलेक्ट्रॉन-बिल्डर आपके प्लेटफॉर्म के लिए देशी मॉड्यूल का निर्माण करेगा, इलेक्ट्रॉन बंधन के लिए सही नाम के साथ; और फिर आप requireइसे सामान्य रूप से कोड में कर सकते हैं ।

मेरे गिथब रेपो और ब्लॉग पोस्ट देखें - मुझे यह पता लगाने में काफी समय लगा।


1
अपने का उपयोग इलेक्ट्रॉन बॉयलरप्लेट-SQLite वास्तव में आसान तरीका है, लेकिन साथnpm install
बर्नार्डो रामोस

1
जब this npm run postinstall ’चलाते हैं, तो मुझे यह त्रुटि मिली" इस समाधान को एक बार में प्रोजेक्ट बनाना। समानांतर बिल्ड को सक्षम करने के लिए, "/ m" स्विच जोड़ें। "
चिराग

इसने मेरे छिपने को एक बार नहीं, बल्कि अब तक दो बार बचाया है!
जॉन नेस्बिट

क्या किसी को पता है कि क्या --save sqlite3विकल्प को पहली पंक्ति (साथ --save-dev electron-builder) पर विश्वसनीय रूप से टैग किया जा सकता है , जहां npm installकेवल एक बार चलाया जाएगा?
फिलिप

यह मेरे लिए काम नहीं करता है, मुझे '../////nan_object_wrap.h:67:18: एरर:' क्लास नेन :: पर्सेंटी <v8 :: ऑब्जेक्ट> जैसी त्रुटियां मिलती हैं, जिसका कोई सदस्य नहीं है, जिसका नाम 'मार्कइंडपेंडेंट' है। `
माइकल

21

मैं मूल नोड sqlite3 मॉड्यूल की सिफारिश नहीं करूंगा। इसे इलेक्ट्रॉन के साथ काम करने के लिए पुनर्निर्माण की आवश्यकता होती है। यह करने के लिए एक बड़े पैमाने पर दर्द है - कम से कम मुझे यह काम करने के लिए कभी नहीं मिल सकता है और उनकी खिड़कियों पर मॉड्यूल के पुनर्निर्माण के लिए कोई निर्देश नहीं है।

इसके बजाय क्रिपकेन के 'sql.js' मॉड्यूल पर एक नज़र डालें जो sqlite3 है जिसे जावास्क्रिप्ट में 100% संकलित किया गया है। https://github.com/kripken/sql.js/


3
इलेक्ट्रॉन डॉक्स बहुत स्पष्ट हैं कि बंडल देशी मॉड्यूल का उपयोग करने के लिए, आपको इलेक्ट्रॉन के साथ काम करने के लिए उन्हें पुनर्निर्माण करने की आवश्यकता होती है। या तो इलेक्ट्रॉन पुनर्निर्माण उपयोगिता जो समय के सबसे अधिक काम करता है या मैन्युअल रूप से ढकोसला निशानी नहीं लगाई उपयोग करें: electron.atom.io/docs/tutorial/using-native-node-modules
ब्रेट

1
धीमी प्रतिक्रिया के लिए क्षमा करें। github.com/electron/electron-rebuild विकास में पुनर्निर्माण के लिए एक उपयोगी उपकरण है। github.com/electron-userland/electron-builder/wiki/… प्रोडक्शन बिल्ड के लिए मल्टी-प्लेटफॉर्म बिल्ड रणनीति का वर्णन करता है। जट याद है, एक बार जब आप मूल deps परिचय करते हैं, तो आप विभिन्न ओएस के लिए संकलन पार करने की क्षमता खो देते हैं। github.com/nodejs/node-gyp#installation के पास आवश्यक विंडोज़ कंपाइलर टूल पर सभ्य डॉक्स हैं।
ब्रेट

1
इन टिप्पणियों में से कोई भी इस उत्तर के लिए प्रासंगिक नहीं है!
user3791372

14
यह उल्लेख किया जाना चाहिए कि sql.js फाइल सिस्टम पर काम नहीं कर सकता है। हर बार आपको डेटाबेस को बदलने की आवश्यकता है जो आपको डिस्क पर पूरी बात लिखनी है। यह सबसे परिदृश्यों के लिए बहुत ज्यादा बेकार बना रही है।
मोड777

3
sql.js अपने खिलौने की तरह, मज़े के लिए बनाया गया है। यह NeDB और अन्य nosql डेटाबेस से बेहतर नहीं हो सकता, क्योंकि इसकी मेमोरी में सभी डेटाबेस स्टोर हैं। इसलिए इसका उपयोग करने का कोई अच्छा कारण नहीं है। छोटे डेटाबेस के लिए नेकबेल की तरह नोस्कल का उपयोग करें, बड़े के लिए आपको
साइक्लाइट

10

यहां दो पहलुओं पर विचार किया जाना है:

  1. सेटिंग NODE_PATH: इससे इलेक्ट्रॉन को यह पता चल जाता है कि आपके मॉड्यूल कहां मिलेंगे ( पूरी तरह से स्पष्टीकरण के लिए इस उत्तर को देखें )
  2. इलेक्ट्रॉन हेडर के खिलाफ देशी मॉड्यूल संकलित करना: आधिकारिक डॉक्स देखें

और निम्नलिखित प्रश्नों की जांच करें, जो एक ही बात पूछें:


मेरे टिप देने के लिए किया जाएगा lovefield एक कोशिश (Google द्वारा)।


Nodewebkit में, मुझे sqlite संकलन करना चाहिए। इलेक्ट्रॉन के लिए एक ही नियम लागू होता है?
वेक्सोनी

@Wexoni AFAIK देशी बाइंडिंग के साथ प्रत्येक नोड मॉड्यूल को इलेक्ट्रॉन हेडर के खिलाफ संकलित किया जाना चाहिए।
यान फोटो

1
@Wexoni मैंने NW के साथ काम नहीं किया है, लेकिन मुझे पता है कि sqlite3इसे इलेक्ट्रॉन में उपयोग करने में सक्षम होने से पहले संकलित किया जाना चाहिए। क्या मैं आपके प्रश्न को सही ढंग से समझ रहा हूँ?
यान फोटो

1
@YannBertrand वे अभी भी अपने हेडर का उपयोग करते हैं। इसलिए मुझे लगता है कि आपको अभी भी उनके हेडर के खिलाफ संकलन करने की आवश्यकता होगी।
यान फोटो

1
अपने टिप लवफील्ड के लिए धन्यवाद। यह वास्तव में एक महान पुस्तकालय है।
मोस्टासिम बिलह

7

मुझे वही समस्या हो रही थी। सब कुछ करने की कोशिश की और मेरे लिए यह काम किया: -

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 \ बाध्यकारी \ स्थान जो कि sqlite3 का उपयोग करने के लिए इलेक्ट्रॉन द्वारा उपयोग किया जाता है।

बस आवेदन शुरू करें और आप अब sqlite3 का उपयोग करने में सक्षम होंगे।


इसने केवल एक खाली फ़ोल्डर बनाया, लेकिन फिर भी इसमें कोई node_sqlite3.nodeफ़ाइल नहीं है
मेहदी देहगानी

इलेक्ट्रॉन-पूर्वनिर्मित का नाम बदलकर इलेक्ट्रॉन कर दिया गया है। अधिक जानकारी के लिए, electron.atom.io/blog/2016/08/16/npm-install-electron
याकूब नेल्सन

6

एक सरल उपाय:

  1. इलेक्ट्रॉन-पुनर्निर्माण स्थापित करें npm i electron-rebuild --save-dev
  2. इलेक्ट्रॉन-पुनर्निर्माण ./node_modules/.bin/electron-rebuild(या .\node_modules\.bin\electron-rebuild.cmdखिड़कियों पर) लॉन्च करें
  3. " Node_modules / sqlite3 / lib / बाइंडिंग / " पर जाएं और फ़ोल्डर का नाम बदलकर " electron-v0.36-darwin-x64 " को " node- v47 -darwin-x64 " करें

PS: v47 मेरा संस्करण है, अच्छे को चुनने के लिए सावधान रहें (आपके मामले में v45 )


4
क्या आप तीसरे चरण की व्याख्या कर सकते हैं? नाम क्यों बदला?
224

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

फिर, अपने package.json की स्क्रिप्ट में, इस पंक्ति को जोड़ें:

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

तो बस बाद में स्थापित करने के लिए फिर से स्थापित स्थापित:

npm install

इलेक्ट्रो-बिल्डर, इलेक्ट्रॉन-वेबपैक और सीक्वल को शामिल करते हुए एक जटिल उपयोग के मामले में मेरे लिए निर्दोष रूप से काम करता है।

यह इलेक्ट्रॉन-वेबपैक के देव मोड और विंडोज और लिनक्स दोनों के लिए उत्पादन मोड में काम करता है।


3

मैं इस त्रुटि का भी सामना करता हूं। यहां बताया गया है कि मैं इसे कैसे हल करता हूं: npm install --save-dev electron-rebuild फिर: ./node_modules/.bin/electron-rebuild

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

पीएस: जबकि यह पुनर्निर्माण पर है, तो npm startइलेक्ट्रॉन ऐप का उपयोग न करें । अन्यथा पुनर्निर्माण प्रक्रिया विफल हो जाएगी।


3

यह संस्करण 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


यह sqlite3 और इलेक्ट्रॉन 8.3.0 के साथ मेरी समस्या थी, और यह काम करता है, धन्यवाद।
शायना कीरवेद ने पहल

2

यहाँ एक समान उत्तर पर एक नज़र डालें

टी एल; डॉ

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
स्क्रिप्ट prepublishकैसी दिखती है?
विक्टर Ivens

0

आप दृश्य स्टूडियो का उपयोग करके मैन्युअल रूप से देशी मॉड्यूल का निर्माण कर सकते हैं।

  1. विजुअल स्टूडियो 2019 डाउनलोड करें।
  2. पैकेज स्थापित करें "c ++ के साथ डेस्कटॉप विकास"। स्थापना विवरण टैब में "MSVC v140 - VS 2015 C ++ बिल्ड टूल (v14.00)" चुनें
  3. अपनी परियोजना में इलेक्ट्रॉन-बिल्डर डाउनलोड करें।
  4. Package.json में एक स्क्रिप्ट बनाते हैं। "स्क्रिप्ट": {"पोस्ट-इंस्टॉलेशन": "इंस्टॉल-ऐप-डिप्स"}

  5. फिर स्क्रिप्ट चलाएँ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.