naveを使ったnode.jsインストールと、最近のnpmの使い方

今風のnode.js環境の作り方です。naveによって複数バージョンのnode.jsを共存させます。
またnpmも以前とは少し使い方が変わってるので、その使い方をフォローしています。


簡単な用語説明:

  • node.js: イベント駆動アーキテクチャなサーバサイドJavaScript環境
  • nave: 複数node.jsバージョンを管理するシステム
  • npm: node.js用パッケージシステム

あらすじ

  • naveダウンロード
  • naveからnodejsインストール
  • インストールしたnodejsにnpmインストール
  • npmでグローバルモジュールインストール

確認した環境

必要なもの

事前に必要なものは、あらかじめパッケージをいれておきます:

  • naveやnpmで必要な物
  • nodejsビルドに必要な物
    • ubuntu natty: python-all、build-essential、pkg-config、libssl-dev、libz-dev
    • cygwin: gcc4-g++、make、openssl、openssl-devel、pkg-config、zlib-devel、python
      • /etc/resolv.conf がなければ以下の内容で作っておく
nameserver 8.8.8.8
nameserver 8.8.4.4

naveを使ったnodejsのインストール

naveをgitでダウンロードし、そこからnode.js最新版をインストールします。以下コマンド:

mkdir ~/.nave
cd ~/.nave
git clone git://github.com/isaacs/nave.git 
~/.nave/nave/nave.sh install latest

以下、nodejs最新版のダウンロードとビルドが走ります。完成後、

~/.nave/nave/nave.sh use latest

とすると、さらにシェルが起動してその中でnodeコマンドが使えるようになります。(Ctrl+Dで抜けれる)

$ node -v
v0.4.8

naveコマンドとして使えるよう、~/.bash_aliasesや~/.bash_profileなどに以下を追加しておくとよいです:

alias nave=$HOME/.nave/nave/nave.sh

このaliasで、nave.shはどこでもnaveコマンドとして使えます

$ nave use latest
Already installed: 0.4.8
using 0.4.8
$

npm インストール

nodeコマンドが使えるようになった状態で、以下を実行します:

curl http://npmjs.org/install.sh | sh

途中対話モードになり"Is this OK? enter 'yes' or 'no'"と聞いてくるので、"yes"と打ちます。

nodeコマンドが使える状態のとき、npmコマンドが使えるようになります。

$ npm -v
1.0.6

グローバルパッケージとしてインストール

コマンドを提供するパッケージは、グローバル(といっても、nodeコマンドのある場所)に入れる必要があります。
たとえば以下のパッケージは、コマンドライン用コマンドを提供しています:

  • vows: BDD(Behavior Driven Development)システム
  • docco: ソースコードからドキュメント生成するツール

グローバルに入れるには、npm install -gで入れます:

npm install -g vows 
npm install -g docco

nodeコマンドが使える状態のとき、vowsコマンドとdoccoコマンドが使えるようになります。

アインインストールは以下のようになります:

npm uninstall -g vows 
npm uninstall -g docco

おまけ: ローカルパッケージとしてダウンロード

オプション-gがないと、実行ディレクトリ下に"node_modules"ディレクトリを作り、そこにパッケージが入ります。

その位置でnodeコマンドを実行すれば、入れたモジュールをrequireで読み込めるようになっています。

例: underscore.js

$ ls
$ npm install underscore
underscore@1.1.6 ./node_modules/underscore
$ ls
node_modules
$ node
> var _ = require("underscore")
> _.map
[Function]
>

node_modulesはその直下のディレクトリ内からも有効になっています。

$ ls
node_modules
$ mkdir -p src/js
$ cd src/js
$ node
> var _ = require("underscore")
> _.map
[Function]
>

npmコマンドも上位ディレクトリのnode_modulesに対して機能します

$ npm install chaos
chaos@0.1.7 ../../node_modules/chaos