Using Native Node Modulesによると、
ElectronでNative Moduleを使用する場合には再ビルドが必要なようなのですが、
windowsではいろいろ準備しないと動かなかったのでやったことをメモしておきます。
追記 2019/10/28
最近のNode.jsのインストーラでは以下のような設定項目があり、チェックをつければ自動で設定してくれるようです。動作確認まではできていないですが、これでできるなら一番楽そうですね。
試したところ、上記のチェックでは「3. python2.7をインストールしてパスを通す(古い手順)」までをほぼ自動でやってくれるようです。
ただ、Visual Studio InstallerからBuild Toolの言語パック(英語)を手動インストールしないと、vcpkgを使うときにエラーになりました。(そのくらい自動でやってほしい…)
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をインストールしてパスを通す(古い手順)
追記(2020/07/06)
Python2.7は2020/01/01にEOLとなっています。
Pythonのパスが通らない場合はPython3のパスを指定しましょう。
※windows-build-toolsのリポジトリを見る限り内部で使われるPythonは3系に更新されているようです。
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で再ビルドしたファイルを置いておけばパッケージングはできるので
一応なんとかなりそうですね。
追記 2018/11/11
vcpkgのバグなのかどうかは分からないのですが、2018/11/11現在、多くのモジュールでインストール時にエラーが出ます。
vcpkg\ports\モジュール名\portfile.cmake
のPREFER_NINJA
を#
でコメントアウトすると正常にインストールできるようになります。
どうやら現状windowsではninjaというビルドツールがうまく動いておらず、ninjaを使わない設定とする必要があるようです。
また、bzip2のインストール時にダウンロードしたファイルが不正だといわれてエラーになりますが、手動で正しいファイルをダウンロード(こことか)してvcpkg\downloads
に入れておけばインストールできます。
追記 2019/09/28
モジュールによっては、Node.jsのバージョン問題でビルドに失敗することがあるようです
例えば、libxmljs-mtはNode.js v8ではビルド成功しましたが、v10では失敗してしまいました