電子でsqlite3モジュールを使用する方法は?


88

コマンドでnpm経由でインストールされたsqlite3パッケージを使用するelectronを使用してデスクトップアプリを開発したい

npm install --save sqlite3

しかし、それは電子ブラウザコンソールで次のエラーを出します

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

私の開発環境はWindows8.1x64ノードバージョン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>

回答:


125

電子でSQLiteを使用する最も簡単な方法は、を使用することelectron-builderです。

まず、package.jsonにインストール後のステップを追加します。

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

次に、必要な依存関係をインストールしてビルドします。

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

electronic-builderは、Electronバインディングの正しい名前を使用して、プラットフォームのネイティブモジュールを構築します。その後require、通常どおりコードでそれを行うことができます。

私のgithubリポジトリブログ投稿を参照してください-これも理解するのにかなりの時間がかかりました。


1
electronic-boilerplate-sqliteを使用するのは確かに簡単な方法ですが、npm install
Bernardo Ramos

1
'npm run postinstall'を実行すると、「このソリューションでプロジェクトを一度に1つずつビルドします。並列ビルドを有効にするには、「/ m」スイッチを追加してください。」というエラーが発生しました。
chirag 2018

これは私の皮を一度ではなく、今のところ二度救った!
ジョンネスビット

--save sqlite3オプションが最初の行(で--save-dev electron-builder)に確実にタグ付けできるかどうか誰かが知っていますnpm installか?どこで一度だけ実行されますか?
フィリップ

これは私には機能しません。`../../ nan / nan_object_wrap.h:67:18:error: 'class Nan :: Persistent <v8 :: Object>'のようなエラーが発生します 'MarkIndependent'という名前のメンバーがありません`
マイケル

21

ネイティブノードのsqlite3モジュールはお勧めしません。電子を扱うには再構築が必要です。これは大変な苦痛です-少なくとも私はそれを機能させることはできず、Windows上でモジュールを再構築するための指示もありません。

代わりに、JavaScriptで100%コンパイルされたsqlite3であるkripkenの「sql.js」モジュールを見てください。 https://github.com/kripken/sql.js/


3
Electronのドキュメントでは、バンドルされたネイティブモジュールを使用するには、Electronを操作するためにモジュールを再構築する必要があることは明らかです。ほとんどの場合に機能するelectron-rebuildユーティリティを使用するか、手動でgypフラグを設定します:electron.atom.io/docs/tutorial/using-native-node-modules
Bret

1
応答が遅くなってすみません。 github.com/electron/electron-rebuildは、開発中に再構築するための便利なツールです。 github.com/electron-userland/electron-builder/wiki/…は、本番ビルドのマルチプラットフォームビルド戦略について説明しています。ただし、ネイティブdepsを導入すると、さまざまなOS用にクロスコンパイルする機能が失われることを忘れないでください。github.com/nodejs/node-gyp#installationには、必要なWindowsコンパイラツールに関する適切なドキュメントがあります。
2017年

1
これらのコメントはどれもこの回答に関連していません!
user3791372 2017年

14
sql.jsはファイルシステム上で動作できないことに注意してください。データベースを変更する必要があるたびに、すべてをディスクに書き込む必要があります。ほとんどのシナリオではほとんど役に立たない。
mode777 2017年

3
sql.jsは、楽しみのために作られたおもちゃのようなものです。すべてのデータベースをメモリに保存するため、NeDBや他のnosqlデータベースよりも優れていることはありません。したがって、それを使用する正当な理由はありません。NeDBのような小さなデータベース利用のNoSQLについては、大規模のためにあなたはsqliteのコンパイルする必要があります
Daimos

9

ここでは、次の2つの側面を考慮する必要があります。

  1. 設定NODE_PATH:これにより、電子はモジュールの場所を知ることができます(詳細な説明についてはこの回答を参照してください)
  2. 電子ヘッダーに対するネイティブモジュールのコンパイル:公式ドキュメントを参照してください

そして、同じことを尋ねる次の質問をチェックしてください:


私のヒントは、ラブフィールド(グーグルによる)を試してみることです。


Nodewebkitでは、sqliteをコンパイルする必要があります。同じルールが電子にも当てはまりますか?
wexoni 2015

@Wexoni AFAIKネイティブバインディングを持つすべてのノードモジュールは、電子ヘッダーに対してコンパイルする必要があります。
Yan Foto 2015

1
@Wexoni NWsqlite3を使用したことはありませんが、電子で使用するには、コンパイルする必要があることを知っています。私はあなたの質問を正しく理解していますか?
Yan Foto 2015

1
@YannBertrand彼らはまだ独自のヘッダーを使用しています。だから私はあなたがまだ彼らのヘッダーに対してそれをコンパイルする必要があると思います。
Yan Foto

1
あなたの先端のラブフィールドをありがとう。それは本当に素晴らしい図書館です。
モスタシムビラー

7

私も同じ問題を抱えていました。すべてを試し、ついにこれは私のために働いた:-

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

これにより、「electron-v1.3-win32-x64」フォルダーが。\ node_modules \ sqlite3 \ lib \ binding \の場所に作成され、electronがsqlite3を使用するために使用します。

アプリケーションを起動するだけで、sqlite3を使用できるようになります。


空のフォルダが作成されましたが、まだnode_sqlite3.nodeファイルがありません
Mehdi Dehghani 2018年

electronic-prebuiltはelectronに名前が変更されました。詳細については、参照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.cmdWindowsで)
  3. ゴー"へ/ node_modules / sqlite3の/ libに/結合"とフォルダの名前を変更する"電子v0.36 -ダーウィン-x64の" "にリンパ節転移V47 -darwin-のx64 "

PS:v47は私のバージョンです、良いものを選択するように注意してください(あなたの場合はv45


4
3番目のステップを説明できますか?なぜ名前を変更するのですか?
m4heshd 2018

3

私もこのエラーに遭遇します。これが私がそれを解決する方法です: npm install --save-dev electron-rebuild そして: ./node_modules/.bin/electron-rebuild

差出人https//electronjs.org/docs/tutorial/using-native-node-modules

ps:再構築中は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とelectron8.3.0での私の問題でした、そしてそれはうまくいきます、ありがとう。
Shayana Keiraved Pahal

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

次に、package.jsonのスクリプトに、次の行を追加します。

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

次に、再インストールしてポストインストールをトリガーします。

npm install

電子ビルダー、電子ウェブパック、および続編を含む複雑なユースケースで私にとって完璧に機能します。

これは、electron-webpackの開発モードとWindowsとLinuxの両方の本番モードで動作します。


2

ここで同様の答えを見てください

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
スクリプトprepublishはどのように見えますか?
Victor Ivens 2017

0

Visual Studioを使用して、ネイティブモジュールを手動でビルドできます。

  1. Visual Studio2019をダウンロードします。
  2. パッケージ「c ++によるデスクトップ開発」をインストールします。[インストールの詳細]タブで、[MSVC v140-VS 2015 C ++ビルドツール(v14.00)]を選択します
  3. プロジェクトにelectron-builderをダウンロードします。
  4. package.jsonでスクリプトを作成します。"scripts":{"postinstall": "install-app-deps"}

  5. 次に、スクリプトを実行します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.