読者です 読者をやめる 読者になる 読者になる

Homebrew で nodebrew をインストールしたら少々はまった

MAC OS 10.11 の MAC BOOK PRO にて。

タイトルどおりはまったのでメモ。はまった内容ですが、普通に Homebrew から nodebrew をインストールして、

$ brew install nodebrew

PATH を追加しろとか言ってくるので、その通りに PATH を設定して、さぁ stable版 node を入れようとしたら、次のエラーに遭遇したのでした。

$ nodebrew install stable

Fetching: https://nodejs.org/dist/v6.6.0/node-v6.6.0.tar.gz
Warning: Failed to create the file
Warning: /Users/naoki/.nodebrew/src/v6.6.0/node-v6.6.0.tar.gz: No such file or
Warning: directory

curl: (23) Failed writing body (0 != 940)
download failed: https://nodejs.org/dist/v6.6.0/node-v6.6.0.tar.gz

ちょっと調べてみると、どうやら同じエラーに遭遇した先輩がたくさんいる模様。原因は、 $HOME/.nodebrew が作成されていなかったから? ということで、それ作成してリトライ。

$ mkdir ~/.nodebrew
$ nodebrew install stable

Fetching: https://nodejs.org/dist/v6.6.0/node-v6.6.0.tar.gz
Warning: Failed to create the file
Warning: /Users/naoki/.nodebrew/src/v6.6.0/node-v6.6.0.tar.gz: No such file or
Warning: directory

curl: (23) Failed writing body (0 != 940)
download failed: https://nodejs.org/dist/v6.6.0/node-v6.6.0.tar.gz

あらっ?またか。
どうやら $HOME/.nodebrew/src も必要なようです。でも、なんだかこのまま行くと、「あれも」「これも」という感じで、次々に同様の作業を繰り返す気がします。なのでさらに調査してみます。。

すると、今回の正解らしき情報が得られました。それは、わざわざ手でこれらのディレクトリを作るのではなく、コマンド nodebrew setup をたたくということです。

$ nodebrew setup

Fetching nodebrew...
Installed nodebrew in $HOME/.nodebrew

========================================
Export a path to nodebrew:

export PATH=$HOME/.nodebrew/current/bin:$PATH
========================================

これで nodebrew の実行に必要な環境がセットアップできたはずです。

$ ls ~/.nodebrew

completions/ current@     default/     iojs/        node/        nodebrew*    src/

よさそうですね。再度、node 安定版をインストールしてみます。

$ nodebrew install stable

Fetching: https://nodejs.org/dist/v6.6.0/node-v6.6.0.tar.gz
######################################################################## 100.0%
creating  ./icu_config.gypi

... (省略)
...

$ nodebrew use v6.6.0
use v6.6.0

$ nodebrew ls
v6.6.0

current: v6.6.0

うまくいきました。done。

【補足】nodebrew は、環境変数 NODEBREW_ROOT で node のインストール先を変更できますが、このときも nodebrew setup を実行すると一発で必要な環境が作成されるので非常に便利。ぜひ覚えておきましょう。