direnvでプロジェクトごとのnodeのバージョンを切り替える

今更ですが、会社でまとめたのでこっちにも貼っときます。

プロジェクトごとにnodeのバージョンが違って、そのたびに思い出しては切り替えることがあります😇 こっちではv8なのにこっちではv10、、、 そもそも覚えてられないし、切り替えるのが面倒、、、、🤯

そういうわけでdirenvを使いましょう。

direnv

これです。 https://github.com/direnv/direnv

こいつを入れて各プロジェクトに.envrcをおくと、そのプロジェクトに移動したタイミングで、.envrcの中身が実行される、みたいなことになります。

■ install

$ brew install direnv

それからシェルにパスを通します。 公式に書いてますが、

~/.bashrc

eval "$(direnv hook bash)"

~/.zshrc

eval "$(direnv hook zsh)"

.config/fish/config.fish

eval (direnv hook fish)

あるいは

direnv hook fish | source

後は、direnv edit コマンドがかけるように以下も追記します。

export EDITOR=vim

後は $ source 設定したファイル で再読込して$ direnv --version が通ればバッチリです。

.envrcを作成

作りたいディレクトリに移動して、$ direnv edit ..envrcの作成が始まります。 別に.envrcを普通においてもいいです。

そのプロジェクトに移動すると、.envrcの中身が走るわけですが、

direnv: error .envrc is blocked. Run `direnv allow` to approve its content.

とか言われることがあります。その場合は書かれてますが、

$ direnv allow

でOKです。

nodeのバージョン切り替え

それぞれのバージョン管理ツールによりますが、以下のような感じで.envrcを書くと動くはず。

■ nodebrew

nodebrew use 使いたいバージョン

■ nvm

nvm use 使いたいバージョン # これだとだめ。nvm command not found的なこと言われる

あるいは.nvmrcを置いてやることもできます。

上の方法だとだめなので、.nvmrcを作ってやりましょう。

.nvmrc

10.16.0

.envrc

nvmrc=~/.nvm/nvm.sh
source $nvmrc
nvm use

nvmrc=のところはnvmの場所です。

【やっとくと良いぞ】.gitignore_globalに設定

他の人がnodeのパッケージ管理に何使ってるかわからんので、こういうファイルはgitに含めたくないものですが、かといって毎回書くと忘れちゃう。 なので、.gitignore_globalを用意して、そこに記述しておきましょう。

$ touch ~/.gitignore_global

.gitignore_global

.DS_Store
.nvmrc
.envrc
$ git config --global core.excludesfile ~/.gitignore_global

あるいは ~/.gitconfig

[core]
    excludesfile = /Users/<username>/.gitignore_global

はい。

参考 - gitignore_globalを作成する on OSX - nvmとdirenvを使ってディレクトリ毎にnodeのバージョンを指定する方法 - fishでdirenvを設定する