Electronにnodegitが入らない

Electronでnodegitを使おうとして、どの参考記事も助けにならなかったので記事を残します。
今回はこの原因だっただけでまた将来的には別の原因でどハマりする可能性があります。

結論:助けにならなかった情報

これらの情報は古くなっているのか、そのままの方法でやっても全くうまくいく気配がありませんでした。
手元のNodeが4なので0.12に戻してみたり、色々やってみたのですが結局ダメ。

結論:助けになった情報

Upgrade notice: (from the above link)
Most native modules are broken because of io.js upgrade, modules writers need to use NAN v2 to rewrite the modules.

これが答えでした。
Electronで後方互換のないバージョンアップが行われたようです。

原因まとめ

  1. Electronの0.31.0でiojs2からiojs3へバージョンアップされた

    • 「Most native modules are broken because of io.js upgrade, module writers need to use NAN v2 to rewrite the modules」

    とのことで、多くのネイティブモジュールとの互換性を失ってしまった(NANというパッケージの互換性がなくなった)

  2. nodegitも例にもれず互換性がなくなったモジュールの1つだった

    なので「nan2に対応しなければ動かないよ」に該当し、動かない。

    この互換性の差が具体的にどうビルドの失敗に繋がるのかは未調査。現状そこまで追る気がしない

  3. Bump nan to v2のPRによって対応するnanのバージョンが2.0.9になった

  4. ただしこのコミットはまだリリースされているバージョンには入っていない

  5. Gitのタグではなくコミットでnpm installする方法を探る

  6. npm i -S https://github.com/nodegit/nodegit/tarball/ece6f2413073f4033316a7c36006a586b7bd94ce

で解決しました。

起承転結

Issueにまとめてあります。 このような感じ になっていました。

バージョン

手元の環境はこのような感じです。

$ node -vv0.12.7$ npm -v2.11.3$ $(npm bin)/electron -vv0.32.3

nodejsのバージョンは4.1.1でも試してみましたが、問題なくビルドできました。
なのでnodejsのバージョンは今回の件に関係ないようです。

Electronの0.31.*以降を使っている場合、nodegitはリリースされているバージョンではダメで、
まだリリースされていないmasterのコミットを引っ張ってこないとダメなようです。
このコミットの入ったリリースが楽しみです。

以上、備忘録でした。