背景
nvmで異なるバージョンのnodeを管理するのは大変便利だけど、pythonのvenvみたいに、「同じバージョンだけど違うグローバルライブラリ」のセットを管理したい場合があるので、その方法を調査してみた。
調査
どうやら、ずっと昔から要望としてはあるものの、「nvmとしては実装する予定がない」らしい。
Since this is a less used feature and it's not that hard to do by hand, I'd rather not bloat the project with it built-in.
Do you mean, installing multiple copies of the same version of node with separate global namespaces and npms?
If that's what you want, why wouldn't you just have multiple copies of nvm in different $NVM_DIRs?
The simple solution to needing multiple installs of node that have the same version number is, to use different NVM_DIR folders (and different installations of nvm), each with their own copy of the node version you want.
結論
nvmとして相当する機能はない、そしてこれからも実装される可能性はなかったが、NVM_DIR
環境変数でnvm本体を複数インストールできるので、この方法で同じバージョンのnodeを隔離することは可能。
例
nvmを別のフォルダーにインストール
READMEに記載された通りに、.nvm-myenv
にnvmをインストールする:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.4/install.sh \
| NVM_DIR=~/.nvm-myenv bash
nvmの切り替え
本来.profile
や.bashrc
に追加されるnvmのscriptを切替時に手動で叩く:
export NVM_DIR="$HOME/.nvm-myenv"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
注意点
-
nvm
コマンドはPATHで参照される実行ファイルではなく、nvm.sh
が実行されるたびにshellに設定されるので、上記の方法で切り替えた後にもし新しいshell sessionに入ったら、もう一度上記のコマンドを叩かないと、nvm
コマンドは見つからなくなる。- 普段、nvm使うときは
.profile
/.bashrc
に上記のコマンドを入れてあるはずだけど、複数のnvmがあるときに「新しいshell sessionは常に.profile
/.bashrc
に設定されている方を使っしまう」という問題があるので、.profile
/.bashrc
からは削除したほうが混乱を防げるだろう。
- 普段、nvm使うときは