web-dev-qa-db-ja.com

electronでsqlite3モジュールを使用するには?

electron を使用して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'

私の開発環境はWindows 8.1 x64ノードバージョン12.7です

mypackage.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>
66
manas

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

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

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

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

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

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

github repoblog post を参照してください-これも理解するのにかなり時間がかかりました。

95
Steve Melia

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

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

17
Joue Bien

ここでは、2つの側面を検討します。

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

同じことを尋ねる次の質問を確認してください。


私のヒントは、 lovefield (Googleによる)試してみることです。

8
Yan Foto

より簡単なソリューション:

  1. Electron-rebuildのインストールnpm i electron-rebuild --save-dev
  2. Electron-rebuildを起動./node_modules/.bin/electron-rebuild(またはWindowsでは.\node_modules\.bin\electron-rebuild.cmd
  3. node_modules/sqlite3/lib/binding /」に移動して、フォルダーの名前を変更します「electron-v0.36-darwin-x64」から「node-v47-darwin-x64 "

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

6
Fabien Sa

私は同じ問題を抱えていました。すべてを試してみましたが、これは私にとってはうまくいきました:-

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

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

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

6
Rj-s

このエラーも発生します。解決方法は次のとおりです:npm install --save-dev electron-rebuild then:./node_modules/.bin/electron-rebuild

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

ps:再構築中ですが、npm startを使用して電子アプリを起動しないでください。そうしないと、再構築プロセスが失敗します。

3
valleygtc

同様の答えをご覧ください here

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
2
smkndblvr

残念ながら、バージョン5ではなくバージョン3および4で動作します。詳細については、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

0
Sailab Rahi