2019-7-4
nodenvでNode.jsのバージョン自動切り替え
GitHub - nodenv/nodenv: Manage multiple NodeJS versions.
なぜ nodenv か?
.node-version
ファイルを配置しておくだけで自動的に Node.js のバージョンを切り替えてくれるため。
自動切り替えは言わずもがな便利だし、.node-version
で明示的にプロジェクトで推奨の Node.js バージョンを示しておくことで後から「このプロジェクト、Node.js のどのバージョン使えばいいんだっけ??」というのがなくなる。
Windows ならnodist
が同じことをしてくれるみたい。
セットアップ方法
# インストール
brew install nodenv
# 下記コマンドを打つと、.bashrcや.zshrcに追記しておくべきスクリプトが出力されるのでそれをコピペする
nodenv init
使い方
# インストールできるNode.jsの一覧表示
nodenv install -l
# Node.jsのインストール
nodenv install [インストールするNode.jsのバージョン]
# 現在アクティブなNode.jsのバージョン
nodenv version
# 端末にインストールされているNode.jsのバージョン一覧
nodenv versions
# 指定したバージョンで.node-versionファイルを生成
nodenv local [使用するNode.jsのバージョン]
# デフォルトで使用するのNode.jsバージョンを指定
nodenv global [使用するNode.jsのバージョン]
おすすめプラグイン
下に挙げるプラグイン以外にも色々便利そうなものはあるので(nodenv-default-packages
とかも便利そう)nodenv 公式リポジトリは一通り見たらいいかも
nodenv-package-rehash
https://github.com/nodenv/nodenv-package-rehash
nodenv は ~/.nodenv/shims
に node やグローバルインストールされたパッケージのエントリポイントが存在している。つまりここに各コマンドに対応したファイルが存在していないとコマンドが実行できない。
shims の更新は nodenv init
や nodenv rehash
が実行された際に行われているみたいで、パッケージをグローバルインストールしたはいいものの前述のコマンドの実行やターミナル再起動を忘れて「何故か知らないけどコマンドが実行できない」みたいな状況が発生する(発生した。
このプラグインを入れるとパッケージのグローバルインストールに自動的に nodenv rehash
してくれる。便利
nodenv-package-json-engine
https://github.com/nodenv/nodenv-package-json-engine
package.json の engines フィールドに従い、node のバージョンを自動で切り替えてくれる。 .node-version
で事足りるという話もあるが、個人的に engines フィールドあるんだからそっち使ったらいいじゃんという気持ちなのでありがたい。
注意点としては、yarn は engines フィールド通りの node バージョンじゃないとエラーが出て諸々のコマンドが失敗してしまう。
node のバージョン管理はしないようなチームの方針だったりすると面倒なので、その場合は .node-version
ファイルでやったほうがいい。