Electron

WindowsでElectronからNative Moduleを使えるようにする

Using Native Node Modulesによると、
ElectronでNative Moduleを使用する場合には再ビルドが必要なようなのですが、
windowsではいろいろ準備しないと動かなかったのでやったことをメモしておく。

1. Visual C++をインストール

Native ModuleはC++で書かれたモジュールのことなので、C++をコンパイルできる環境を準備しなければいけません。
2018/03/18現在では、Visual Studio Communityをインストールすることになります。
vs_Community.exeをダウンロードしてC++関連の機能をインストールします。
私はどの機能がどこに関係しているかを完全に理解していないので、C++っぽい機能をすべてインストールしておきました。

2. windows-build-toolsをインストール

nodejsからVisual C++を使えるようにするために必要なようです。
コマンドプロンプトで以下のコマンドを実行するとインストールできます。

npm -g i windows-build-tools

3. python2.7をインストールしてパスを通す

windows-build-toolsのインストール時にpython2をインストールしているようなのですが、
パスを自力で通す必要があるようで、通し方が分からなかったので別でインストールしてしまいました。
2018/03/18現在では、minicondaが便利です
インストールしたらAnaconda2ディレクトリを環境変数"Path"に追加しておきます。

追記
npm config set python=~~
だとうまく行きませんでしたが
%USERPROFILE%.windows-build-tools\python27
を追加してしまえばminicondaは不要です。
python3ユーザとしてはめんどいですが。

4. vcpkgをインストールして必要なモジュールを追加する

3.を完了した時点でビルドできる場合もあるのですが、
Native ModuleがVisual C++に初期で入っていないモジュールを内部で使用しているとビルドエラーが出ます。私はcouchbaseモジュールをビルドしたところopensslが見つからないと言われました。
そこでVisual C++にモジュールを追加するためにvcpkgを利用します。
git cloneしてきて、readmeの通りにbatを実行するとvcpkgがインストールできます。
インストールが終わったら

vcpkg.exe integrate install

でVisual C++と統合します。今回はopensslがないと言われていたので以下のコマンドでインストールします。

vcpkg.exe install openssl:x64-windows

ファイルシステムがNTFSでないと失敗するバグがあるようなので気を付けましょう。私はそれで1時間無駄にしました。

5. electron-rebuildを実行する

ここまできたらelectron-rebuildで再ビルドができるようになっているはずです。以下のように再ビルドをしましょう。

node_modules\.bin\electron-rebuild.cmd

追記 2018/03/24
electron-builderからinstall-app-depsで再ビルドすると、上記を行っていたとしてもうまく動きませんでした
しかし、npmRebuild:falseにしてelectron-rebuildで再ビルドしたファイルを置いておけばパッケージングはできるので
一応なんとかなりそうですね。