[nvm]direnvを使ってディレクトリごとに異なるバージョンを使えるようにする

環境

OS: macOS Catalina 10.15.7
nvm: 0.36.0
direnv: 2.27.0

背景

とあるプロジェクトではnodeがv10だけど、とあるプロジェクトではv14というケースがある。プロジェクトごとに異なるnodeのバージョンを自動で使えるようにしたい

nodeのバージョン管理はnvmで行っているので、毎回毎回 nvm use v10.0.0 とかすれば済む話ではあるけど、忘れたりしてエラーになると面倒。

direnvを使って解決

direnvを利用する。brewでインストール。

% brew update
% brew install direnv

プロジェクトフォルダのルート(ここではproject1)に .nvmrc と .envrcをして自動で読み込むということをしていく。

まずはnodeのバージョン確認。

 ~/project1 % node -v
 v10.15.0

.nvmrcを作成

~/project1 % echo "14.4.0" > .nvmrc

.envrcを作成

~/project1 % vi .envrc
# .envrc
source $(brew --prefix nvm)/nvm.sh
nvm use

1行目のnvmの読み込みは、環境によって変わる可能性がある。
私の場合は、nvmのインストールにハマって、.zshrcに記述していたのでその内容をコピペした。

設定をすると、direnv: error .envrc is blocked. Run direnv allow to approve its content. と言われるので、

~/project1 % direnv allow

エラーが出なければ、設定完了。現時点でnodeのバージョンの変更もされているはずなので、nodeのバージョンを確認する。

% node -v
v14.4.0

念のため、ターミナルを終了して再度設定したフォルダに移動してnode -vをしておくと安心

コメント