Làm thế nào để sử dụng mô-đun sqlite3 với electron?


88

Tôi muốn phát triển ứng dụng dành cho máy tính để bàn bằng cách sử dụng electron sử dụng gói sqlite3 được cài đặt qua npm bằng lệnh

npm install --save sqlite3

nhưng nó gây ra lỗi sau trong bảng điều khiển trình duyệt electron

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

Môi trường phát triển của tôi là Windows 8.1 x64 phiên bản nút 12.7

tệp package.json của tôi trông giống như sau:

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

tệp 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;
    });
});

tệp 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();

tệp 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>

Câu trả lời:


125

Cho đến nay, cách dễ nhất để sử dụng SQLite với electron là với electron-builder.

Đầu tiên, thêm bước postinstall trong package.json của bạn:

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

và sau đó cài đặt các phụ thuộc cần thiết và xây dựng:

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

electron-builder sẽ xây dựng mô-đun gốc cho nền tảng của bạn, với tên chính xác cho liên kết Electron; và sau đó bạn có thể requireviết mã như bình thường.

Xem repo githubbài đăng trên blog của tôi - tôi cũng mất khá nhiều thời gian để tìm ra điều này.


1
Sử dụng của bạn electron-soạn-sqlite thực sự là phương pháp dễ dàng hơn, nhưng vớinpm install
Bernardo Ramos

1
khi chạy 'npm run postinstall', tôi gặp lỗi này "Đang xây dựng các dự án trong giải pháp này tại một thời điểm. Để bật tính năng xây dựng song song, vui lòng thêm nút chuyển" / m "."
chirag

Điều này đã cứu tôi không phải một lần mà là hai lần cho đến nay!
John Nesbitt

Có ai biết liệu --save sqlite3tùy chọn có thể được gắn thẻ đáng tin cậy vào dòng đầu tiên (với --save-dev electron-builder), nơi npm installsẽ chỉ được chạy một lần không?
Phillip

Điều này không hiệu quả với tôi, tôi gặp các lỗi như `../../nan/nan_object_wrap.h:67:18: error: 'class Nan :: Persently <v8 :: Object>' không có thành viên nào có tên 'MarkIndependent' '
Michael

21

Tôi không giới thiệu mô-đun sqlite3 nút gốc. Nó đòi hỏi phải được xây dựng lại để hoạt động với electron. Đây là một nỗi đau lớn phải làm - Ít nhất tôi không bao giờ có thể làm cho nó hoạt động và họ không có hướng dẫn để xây dựng lại các mô-đun trên windows.

Thay vào đó, hãy xem mô-đun 'sql.js' của kripken là sqlite3 đã được biên dịch 100% bằng JavaScript. https://github.com/kripken/sql.js/


3
Tài liệu điện tử khá rõ ràng rằng để sử dụng các mô-đun gốc đi kèm, bạn bắt buộc phải xây dựng lại chúng để làm việc với điện tử. Sử dụng tiện ích xây dựng lại điện tử hoạt động hầu hết thời gian hoặc đặt cờ gyp theo cách thủ công: electron.atom.io/docs/tutorial/using-native-node-modules
Bret

1
Xin lỗi vì sự phản ứng chậm chạp. github.com/electron/electron-rebuild là một công cụ tiện dụng để xây dựng lại trong quá trình phát triển. github.com/electron-userland/electron-builder/wiki/… mô tả chiến lược xây dựng đa nền tảng cho các bản dựng sản xuất. Nhưng hãy nhớ rằng, một khi bạn giới thiệu các bản gốc, bạn sẽ mất khả năng biên dịch chéo cho các hệ điều hành khác nhau. github.com/nodejs/node-gyp#installation có nhiều tài liệu về các công cụ biên dịch windows cần thiết.
Bret vào

1
không có bình luận nào có liên quan đến câu trả lời này!
user3791372

14
Cần lưu ý rằng sql.js không thể hoạt động trên hệ thống tệp. Mỗi khi bạn cần thay đổi cơ sở dữ liệu, bạn phải ghi toàn bộ vào đĩa. Làm cho nó trở nên vô dụng trong hầu hết các tình huống.
mode777

3
sql.js giống như một món đồ chơi, được tạo ra để giải trí. Nó không thể tốt hơn NeDB và các cơ sở dữ liệu nosql khác, vì nó lưu trữ tất cả cơ sở dữ liệu trong bộ nhớ. Vì vậy, không có lý do chính đáng để sử dụng nó. Đối với cơ sở dữ liệu nhỏ sử dụng nosql như NeDB, đối với cơ sở dữ liệu lớn hơn, bạn phải biên dịch sqlite
Daimos 22/1017

9

Hai khía cạnh cần được xem xét ở đây:

  1. Cài đặt NODE_PATH: điều này cho phép điện tử biết nơi tìm các mô-đun của bạn (xem câu trả lời này để được giải thích kỹ lưỡng)
  2. Biên dịch các mô-đun gốc dựa trên tiêu đề điện tử: xem tài liệu chính thức

Và kiểm tra các câu hỏi sau, yêu cầu tương tự:


Mẹo của tôi là dùng thử lovefield (của Google).


Trong Nodewebkit, tôi phải biên dịch sqlite. Quy tắc tương tự áp dụng cho electron?
Wexoni

@Wexoni AFAIK mọi mô-đun nút có liên kết gốc phải được biên dịch dựa trên tiêu đề điện tử.
Yan Foto

1
@Wexoni Tôi chưa làm việc với NW, nhưng tôi biết rằng nó sqlite3phải được biên dịch trước khi có thể sử dụng nó trong điện tử. Tôi có hiểu đúng câu hỏi của bạn không?
Yan Foto

1
@YannBertrand họ vẫn sử dụng tiêu đề riêng. Vì vậy, tôi cho rằng bạn vẫn cần phải biên dịch nó dựa trên tiêu đề của chúng.
Yan Foto

1
Cảm ơn vì lời khuyên của bạn. Nó thực sự là một thư viện tuyệt vời.
Mostasim Billah

7

Tôi đã gặp vấn đề tương tự. Đã thử mọi thứ và cuối cùng điều này đã làm việc cho tôi: -

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

Thao tác này sẽ tạo thư mục "electron-v1.3-win32-x64" trong. \ Node_modules \ sqlite3 \ lib \ binding \ location được electron sử dụng để sử dụng sqlite3.

Chỉ cần khởi động ứng dụng và bạn sẽ có thể sử dụng sqlite3 ngay bây giờ.


Nó vừa tạo ra một thư mục trống, nhưng vẫn không có node_sqlite3.nodetập tin trong nó
Mehdi Dehghani

điện tử-xây dựng trước đã được đổi tên thành điện tử. Để biết thêm chi tiết, hãy xem electron.atom.io/blog/2016/08/16/npm-install-electron
Jacob Nelson

6

Một giải pháp đơn giản hơn:

  1. Cài đặt tái tạo điện tử npm i electron-rebuild --save-dev
  2. Khởi chạy xây dựng lại điện tử ./node_modules/.bin/electron-rebuild(hoặc .\node_modules\.bin\electron-rebuild.cmdtrên cửa sổ)
  3. Truy cập " node_modules / sqlite3 / lib / binding / " và đổi tên thư mục " electron-v0.36-darwin-x64 " thành " node- v47 -darwin-x64 "

PS: v47 là phiên bản của tôi, hãy cẩn thận để chọn một cái tốt (trong trường hợp của bạn là v45 )


4
Bạn có thể giải thích bước thứ ba? Tại sao phải đổi tên?
m4heshd

3

Tôi cũng gặp phải lỗi này. Đây là cách tôi giải quyết nó: npm install --save-dev electron-rebuild sau đó: ./node_modules/.bin/electron-rebuild

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

ps: Trong khi nó đang được xây dựng lại, đừng sử dụng npm startđể lanch ứng dụng điện tử. Nếu không, quá trình xây dựng lại sẽ không thành công.



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

Sau đó, trong các tập lệnh của package.json của bạn, hãy thêm dòng này:

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

Sau đó, chỉ cần cài đặt lại để kích hoạt quá trình cài đặt sau:

npm install

Hoạt động hoàn hảo đối với tôi trong một trường hợp sử dụng phức tạp cũng liên quan đến electron-builder, electron-webpack và phần tiếp theo.

Nó hoạt động ở chế độ nhà phát triển của electron-webpack và ở chế độ sản xuất cho cả Windows và Linux.


2

Hãy xem một câu trả lời tương tự ở đây

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
kịch bản prepublishtrông như thế nào?
Victor Ivens

0

Bạn có thể xây dựng thủ công các mô-đun gốc bằng cách sử dụng studio trực quan.

  1. Tải xuống visual studio 2019.
  2. Cài đặt gói "phát triển máy tính để bàn với c ++". Trong tab chi tiết cài đặt, chọn "MSVC v140 - VS 2015 C ++ build tools (v14.00)"
  3. Tải xuống trình xây dựng điện tử trong dự án của bạn.
  4. Trong package.json, hãy tạo một tập lệnh. "scripts": {"postinstall": "install-app-deps"}

  5. sau đó chạy script.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.