ndenvでNode.jsのバージョンを自動切り替え

Node.js の管理に nodebrew を利用していました。とても便利でしたが、Node.js のバージョンが異なる複数のプロジェクトを扱うようになり、いちいち nodebrew use でバージョンを切り替えるのが面倒になりました。そこで、自動でバージョンを切り替えてくれる ndenv を利用してみます。

ndenvをインストール

https://github.com/riywo/ndenv#install に記載された手順で ndenv をインストールしてパスを通します。

$ git clone https://github.com/riywo/ndenv ~/.ndenv
$ echo 'export PATH="$HOME/.ndenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(ndenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l

利用できるようになったか確認します。

$ ndenv
ndenv 0.4.0-5-g6ee4840
Usage: ndenv <command> [<args>]

Some useful ndenv commands are:
   commands    List all available ndenv commands
   local       Set or show the local application-specific Node version
   global      Set or show the global Node version
   shell       Set or show the shell-specific Node version
   rehash      Rehash ndenv shims (run this after installing executables)
   version     Show the current Node version and its origin
   versions    List all Node versions available to ndenv
   which       Display the full path to an executable
   whence      List all Node versions that contain the given executable

See `ndenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/riywo/ndenv#readme

no such command `install’

ndenv install -l を実行すると、インストール可能な Node.js のバージョン一覧を確認できるようなのですが、下記メッセージが表示され利用できませんでした。

$ ndenv install -l
ndenv: no such command `install'

installコマンド を利用できるようにするには、 node-build というプラグインを追加します。

$ git clone https://github.com/riywo/node-build.git $(ndenv root)/plugins/node-build

ndenv install -l が実行できるようになりました。

$ ndenv install -l
Available versions:
  v0.1.14
  v0.1.15
  v0.1.16
  v0.1.17
  v0.1.18
      (省略)

ndenvの使い方

主なコマンド

コマンド 概要
ndenv install -l インストールできるNode.jsのバージョン一覧を表示
ndenv install <version> 指定バージョンのNode.jsをインストール
ndenv uninstall <version> 指定バージョンのNode.jsをアンインストール
ndenv versions インストール済みのNode.jsのバージョン一覧を表示
ndenv local <version> プロジェクトごとに利用したいバージョンを設定
ndenv global <version> デフォルトで利用したいバージョンを設定

Node.jsのインストール

現在、インストール済みのNode.jsは存在しません。

$ ndenv versions
* system (set by /Users/wakuwaku/.ndenv/version)

v8.10.0 v9.6.1 v11.4.0 をインストールしてみます。

$ ndenv install v8.10.0
Downloading node-v8.10.0-darwin-x64.tar.gz...
-> https://nodejs.org/dist/v8.10.0/node-v8.10.0-darwin-x64.tar.gz
Installing node-v8.10.0-darwin-x64...
Installed node-v8.10.0-darwin-x64 to /Users/wakuwaku/.ndenv/versions/v8.10.0

$
$ ndenv install v9.6.1
Downloading node-v9.6.1-darwin-x64.tar.gz...
-> https://nodejs.org/dist/v9.6.1/node-v9.6.1-darwin-x64.tar.gz
Installing node-v9.6.1-darwin-x64...
Installed node-v9.6.1-darwin-x64 to /Users/wakuwaku/.ndenv/versions/v9.6.1

$
$ ndenv install v11.4.0
Downloading node-v11.4.0-darwin-x64.tar.gz...
-> https://nodejs.org/dist/v11.4.0/node-v11.4.0-darwin-x64.tar.gz
Installing node-v11.4.0-darwin-x64...
Installed node-v11.4.0-darwin-x64 to /Users/wakuwaku/.ndenv/versions/v11.4.0

無事、インストールできたようです。

$ ndenv versions
* system (set by /Users/wakuwaku/.ndenv/version)
  v11.4.0
  v8.10.0
  v9.6.1

デフォルトで利用するNode.jsを設定

デフォルト(グローバル)で利用するバージョンを設定するには、ndenv global <version> を実行します。

v8.10.0 にしてみます。

$ ndenv global v8.10.0
$ node -v
v8.10.0
$ ndenv versions
  system
  v11.4.0
* v8.10.0 (set by /Users/wakuwaku/.ndenv/version)
  v9.6.1

v9.6.1 にしてみます。

$ ndenv global v9.6.1
$ node -v
v9.6.1
$ ndenv versions
  system
  v11.4.0
  v8.10.0
* v9.6.1 (set by /Users/wakuwaku/.ndenv/version)

プロジェクトごとに利用するNode.jsを設定

プロジェクトごとで利用するバージョンを設定するには、ndenv local <version> を実行します。 実行すると .node-version というファイルが生成されて、そこにプロジェクトで利用するバージョンが設定されます。

まず検証用として2つプロジェクトディレクトリを生成します。

$ mkdir project1
$ mkdir project2
$ ls
project1	project2

project1では、v8.10.0 を利用するように設定します。

$ cd project1
$
$ ndenv local v8.10.0
$
$ node -v
v8.10.0
$
$ ndenv versions
  system
  v11.4.0
* v8.10.0 (set by /tmp/project1/.node-version)
  v9.6.1
$
$ cat .node-version
v8.10.0

project2では、v11.4.0 を利用するように設定します。

$ cd ../project2
$
$ ndenv local v11.4.0
$
$ node -v
v11.4.0
$
$ ndenv versions
  system
* v11.4.0 (set by /tmp/project2/.node-version)
  v8.10.0
  v9.6.1
$
$ cat .node-version
v11.4.0

各ディレクトリで適用されるバージョンを確認

デフォルトの設定、プロジェクトごとの設定が完了しました。最後に各ディレクトリで適用されるバージョンを確認してみます。

$ pwd
/tmp
$
$ node -v
v9.6.1
$ pwd
/tmp/project1
$
$ node -v
v8.10.0
$ pwd
/tmp/project2
$
$ node -v
v11.4.0