Edited at

Electron で sqlite を使う(Node.js の ABI バージョン確認)

More than 3 years have passed since last update.

(1) Electron の ABI バージョンの取得方法:

Electron を ELECTRON_RUN_AS_NODE=1 で Node.js モードで起動したとき、

最新の Node.js と ABI (application binary interface) バージョン番号が違うことがある。

以下のコマンドで、49 とかの番号を確認できる。

ELECTRON_RUN_AS_NODE=1 electron -e 'process.stdout.write(process.versions.modules)'


(2) Electron から sqlite3 を使う準備:

electron-rebuild でモジュールをリビルドする必要がある。

npm install --save sqlite3

electron-rebuild -w sqlite3


(3) Electron から他の JS ファイルを実行する手順:

var child_process = require("child_process");

var cmd = process.argv[0];
var args = ["app.js"];
var env = {ELECTRON_RUN_AS_NODE: "1"};
var options = {env: env}
child_process.execFile(process.execPath, args, options);


(4) Electron から起動した他の JS ファイルで、sqlite3 を使うとき:

Electron を ELECTRON_RUN_AS_NODE=1 で Node.js モードで起動したとき、

require("sqlite3") すると ABI の違いでエラーになり、SQLite を使えない。

Error: Cannot find module './node_modules/sqlite3/lib/binding/node-v49-darwin-x64/node_sqlite3.node'

node-v49-darwin-x6449 の部分が、Electron の Node.js の ABI バージョン。

Electron では electron-v1.3-darwin-x64 が使えるので、リンクすると使えるようになる。

cd node_modules/sqlite3/lib/binding

ln -s electron-v1.3-darwin-x64 node-v49-darwin-x64
ELECTRON_RUN_AS_NODE=1 electron node_modules/sqlite3