Node.jsとnvmを初めてインストールするときのハマりポイントと対策
最近何かと話題の Node.js を使ってみることにした。 インストール自体は公式の Wiki を見ればそんなに難しくない。いつもの configure, make, make install するだけだ。
でも Node.js はまだまだ開発中のプロジェクトで、今でもがんがん更新されてる。すぐに新しいバージョンが出てくるんだけど、そのたびにソースからインストールし直すのもいやだし、ちょっと前のバージョンに戻したくなることもあるかもしれない。
そんなわけで、最近の Node.js は nvm というツールを使うのが流行みたいだ。こいつを使うと複数バージョンのインストール、切り替えが出来るようなって便利。
Mac でも Linux(Ubuntu) でも使えるんだけど、微妙にハマったとこがあったので手順を書いておく。
2012/03/21追記
npm でのパッケージのインストール、設定について追記した。
準備
まず始めに、必要なパッケージとかをあらかじめインストールしておく。
nvm のインストール
nvm は Node Version Manager のことで、Node.js のインストール、バージョンごとの管理、シェルの環境設定をやってくれる。
nvm を使うには Github のリポジトリをクローンする。
% git clone git://github.com/creationix/nvm.git ~/.nvm
あとは nvm 本体を source すれば OK。
% source ~/.nvm/nvm.sh
2012/03/20追記
以前は zsh でエラーが出ていたけど、現状の最新バージョンでは修正されてるので以下の対応は不要になった。念のため以前の対応内容も残しておく。
旧バージョンでエラーが出ていたときの対応(現在は不要)
... のはずなんだけど zsh の場合はエラーが出てしまう。実は nvm.sh は bash が前提になっていて、${BASH_ARGV[0]}
ってとこが zsh で解釈できないからだ。
この問題は本家の Issues にも挙がってるので、それを参考に bash でも zsh でも動くように直した。
diff --git a/nvm.sh b/nvm.sh index 99eb87a..9e9951b 100644 --- a/nvm.sh +++ b/nvm.sh @@ -5,8 +5,7 @@ # Implemented by Tim Caswell <tim@creationix.com> # with much bash help from Matthew Ranney -# Auto detect the NVM_DIR using magic bash 3.x stuff -export NVM_DIR=$(dirname ${BASH_ARGV[0]}) +export NVM_DIR=$(cd $(dirname ${BASH_SOURCE[0]:-$0}); pwd) nvm() {
これを適応して、改めて source してみよう。
% source ~/.nvm/nvm.sh
エラーが出なくなった。よしよし。
nvm を使用して Node.js をインストールする
いよいよ Node.js 本体をインストールする。nvm がちゃんと入っていればコマンド1つ打つだけでよくて簡単。
今回は 0.4.0 をインストールした。
% nvm install v0.4.0
インストールできたら use コマンドを使って環境を切り替える。
% nvm use v0.4.0 Now using node v0.4.0
ちゃんとインストールできてるか確認してみよう。
% node --version v0.4.0
OKOK。パスも通ってる。
別のバージョンもインストールできる。試しに0.3系もインストールしてみた。
% nvm install v0.3.8
複数インストールした後は nvm ls
コマンドでバージョン一覧が見れる。
% nvm ls v0.3.8 v0.4.0 *
今有効になってるバージョンには *
がつく。別のバージョンに切り替えたいときは use コマンドを使おう。
% nvm use v0.3.8 Now using node v0.3.8 % node --version v0.3.8
これで複数のバージョンを切り替えできるようになったし、新しいバージョンが出ても簡単に更新できる。
インストールできるバージョン一覧は nvm コマンドでは見れないので、公式のダウンロードページで確認しよう。
npm でモジュールをインストールする
Node.jsでは npm を使って追加のパッケージを管理する。nvm を使うと npm も使えるようになっているので早速試してみる。
バージョンは node v0.6.9, npm 1.1.0-3 で確認した。
# formidable パッケージをインストール % npm install -g formidable
-g オプションを付けるとグローバルインストールになって、Node.js がインストールされている共通の領域にパッケージがインストールされる。nvm を使用している環境の場合、バージョン別の場所にパッケージがインストールされる形になる。
例えば nvm use v0.6.9
をした後は ~/.nvm/v0.6.9/lib/node_modules の下にインストールされる。
ただし、こうやってインストールしたパッケージを使おうと node を起動しても「見つかりません」というエラーが出てしまう。
これを防ぐために NODE_PATH 環境変数を指定する。node 本体は NODE_PATH からパッケージを探してくれるので、パッケージをインストールしたディレクトリを指定しておけばうまく動く。
# nvm use した後に以下を実行 % export NODE_PATH=${NVM_PATH}_modules
シェルの設定を追加
nvm の設定はログアウトすると無くなってしまうので、シェルの初期化ファイルに書いておこう。
# ~/.zshenv, ~/.bash_profile などに以下を追加 source ~/.nvm/nvm.sh nvm use "v0.4.0"
ただし、この書き方の場合 nvm とかがインストールされてない環境で余計なエラーが出てしまう。それではかっこわるいのでインストール済みかどうかチェックするようにした。
# nvm と指定されたバージョンの Node.js がインストール済みの場合だけ # 設定を有効にする if [[ -f ~/.nvm/nvm.sh ]]; then source ~/.nvm/nvm.sh if which nvm >/dev/null 2>&1 ;then _nodejs_use_version="v0.4.0" if nvm ls | grep -F -e "${_nodejs_use_version}" >/dev/null 2>&1 ;then nvm use "${_nodejs_use_version}" >/dev/null export NODE_PATH=${NVM_PATH}_modules${NODE_PATH:+:}${NODE_PATH} fi unset _nodejs_use_version fi fi
インストール済みの場合だけ nvm use するようにした。.zshrc をいろんな環境で使い回してるときはこうした方がいいと思う。
これでインストールと環境設定は終わり。新しいバージョンが出てきても簡単に設定を変えれるようになったし、もう安心だ。