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を設定する