Help us understand the problem. What is going on with this article?

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

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

追記 2019/10/28
最近のNode.jsのインストーラでは以下のような設定項目があり、チェックをつければ自動で設定してくれるようです。動作確認まではできていないですが、これでできるなら一番楽そうですね。
WS001204.JPG

試したところ、上記のチェックでは「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をインストールしてパスを通す

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では失敗してしまいました

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away