なにか作る

なにかを作るブログです。

Windowsでnode-gypのビルドを通す

npm install したときにエラーが出るなと思ったら node-gyp とやらから出ているエラーだった。なんじゃないなこれと思って調べてみると Node.js native addon build tool とのこと。Ruby でもあったなーこういうの。確かにエラーが起きそうなところだ。

それから数時間…結構難儀したけれど、以下の作業を行ったら何とかビルドが完了するまでに至ったので、ここにメモしておく*1。併せて TooTallNate/node-gyp · GitHub も見てほしい。

環境・バージョン

手順

Python のインストール

Python が必要らしい。Welcome to Python.orgWindowsインストーラーがあるのでこれを迷うことなくインストールする。バージョンは 2.7.3 を選ぶ。

Microsoft Visual Studio C++ 2012 for Windows Desktop のインストール

Visual Studio までインストールしなきゃいけないの?と思うけど、そういう前提条件となっているのでインストールする。ここからダウンロードできる。

ソースコードを修正する

どうやら node-gyp には、Windows のユーザー名に ASCII 以外の文字が入っているとエラーになってしまうバグがあるらしい。そして、そのバグは現在も修正されていない。

Problem with non-acsii userprofile name on Windows (7) · Issue #297 · TooTallNate/node-gyp · GitHub

なので、Windows のユーザー名に日本語などの文字を使っている場合は、仕方なくソースコードを修正してこれに対処する。対処策は以下のページで示されている。

Quick and dirty fix to allow WriteXmlIfChanged to write xml in utf-8, co... by jfhenriques · Pull Request #366 · TooTallNate/node-gyp · GitHub

日本語環境だと SHIFT_JIS なので以下のように変更。

  # It has changed, write it
  if existing != xml_string:
    f = open(path, 'w')
    try:
      xml_string = xml_string.encode(encoding)
    except Exception:
      xml_string = unicode(xml_string, 'shift_jis').encode(encoding)
    f.write(xml_string)
    f.close()

--msvs_version=2012 オプションを付ける

npm install --msvs_version=2012

これを付けないと VS2010 だと無理ですよーと自分の環境では表示された*2。node-gyp コマンドを実行する際も同様のオプションがあるらしいけど、こっちは試してないのでうまくいくか不明。

追記

続きあり:Windowsでnode-gypのビルドを通す - その2 - なにか作る

*1:まだビルド時の警告は出てるのでうまくいってないのかもしれないが……。

*2:VS2010 入れた覚えはないのだが、何かのインストールで併せて入ったのか?