dackdive's blog

新米webエンジニアによる技術ブログ。JavaScript(React), Salesforce, Python など

Nodeのバージョン管理をndenvにしたけどうまくバージョンが切り替わらなかったときのメモ

メモ。
これまでは Homebrew でインストールした Node を使っていたが、バージョンを上げたくて複数バージョン管理できるツールを取り入れることにした。
Node のバージョン管理ツールはちょっと調べた限り

あたりがあったが、元々 Python のバージョン管理に pyenv を使っていた過去もあり同じような使い勝手の ndenv にした。
またこの機会に anyenv もインストールし、ndenv は anyenv 経由でインストールすることにした。

n も一瞬触ってみたが、「プロジェクトごとに Node のバージョンを固定してバージョンを自動的に切り替える」をやる方法がわからず ndenv に乗り換えた。


インストール手順

こちらの記事が詳しい。


anyenv と ndenv のインストール

$ git clone https://github.com/riywo/anyenv ~/.anyenv

で anyenv をインストールした後、 .zshrc

export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"

を追記しておく。今回のみシェルを再起動するため

$ exec $SHELL -l

を実行する。

最後に ndenv をインストールする。

$ anyenv install ndenv
$ exec $SHELL -l


ndenv で特定バージョンの Node をインストール

$ ndenv install -l
Available versions:
  v0.1.14
  v0.1.15
  v0.1.16
  ...

でインストールしたいバージョンを探し

$ ndenv install v8.9.3

のようにバージョンを指定してインストールする。

$ ndenv global v8.9.3
$ ndenv rehash
$ ndenv versions
  system
* v8.9.3 (set by /Users/yamazaki/.anyenv/envs/ndenv/version)


トラブルシューティング

$ ndenv versions
  system
* v8.9.3 (set by /Users/yamazaki/.anyenv/envs/ndenv/version)
$ node -v
v6.9.4

切り替わってない...?
(v6.9.4 は以前 Homebrew 経由でインストールしたバージョン)

$ which node
/usr/local/bin/node

Homebrew でインストールした Node が優先されているようだ。
似たような問題に遭遇している人がいた。

Homebrew をアップデートしたら ndenv の node が使えなくなった | WEBMAN

回避策として、記事に記載されている通り、Homebrew の Node をアンインストールした。

$ brew uninstall --ignore-dependencies node
$ exec $SHELL -l
$ which node
/Users/yamazaki/.anyenv/envs/ndenv/shims/node
$ ndenv versions
* v8.9.3 (set by /Users/yamazaki/.anyenv/envs/ndenv/version)

which node のパスが変わっているので無事にアンインストールできたっぽい。
また ndenv versions したときに system が表示されなくなった。


npm にまだ問題があった

$ which npm
/usr/local/bin/npm

npm コマンドが残っていた...

あたりを参考に

$ npm uninstall -g npm
$ rm -rf /usr/local/lib/node_modules
$ brew prune

を実行してきれいになった。本来は Node より先に npm をアンインストールすべきだったらしい。

$ which npm
/Users/yamazaki/.anyenv/envs/ndenv/shims/npm

npm のパスが変わったのでこれでおそらく大丈夫。

# v6.9.4 は ndenv install 済みとして
$ ndenv local v6.9.4
$ node -v
v6.9.5
$ npm -v
3.10.10

$ ndenv local v8.9.3
v8.9.3
$ npm -v
5.5.1