Node.jsの環境を作るのにNode.jsのバージョン管理ツールは必須で、かんたんにNode.jsのバージョンを切り替えできないとキツイです。
nvmはユーザー、ディレクトリごとに切り替えできます。
direnvが使えるなら一番のオススメです。
Windowsでnvmは使えません。別プロジェクトで開発されたnvm-windowsがありますが、ディレクトリごとにNode.jsを切り替えることができません。
いまのところLinux, Macで便利なツールだと思って下さい。
個人的には、direnvがインストールされている環境では、Node.jsバージョン管理ツールの中で最強だと思ってます。
nvmインストール
インストール作業は、LinuxとMac同じ方法です。もちろん使い方も同じ。
まずは、インストールシェルをダウンロードしてnvmコマンドが実行できる環境を作ります。
nvmをインストールするユーザーでターミナルに接続し、この1行を実行して下さい。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash
作業はこれで終わりです。
("curl"でinstall.shの内容を出力して "| bash"がその内容でインストールを実行する。)
"v0.35.2"はnvmのアップデートが行われると変わります。
最新はnvmのgithubで確認してください。
nvmが使えるか確認してみましょう。
command -v nvm
あらっ? 反応なし。ターミナルを一旦閉じて、開き直してからまた実行します。
$ command -v nvm
nvm
nvmコマンドが使えるようになりました。
"source [設定ファイル]" を実行すればターミナルを開き直さなくてもいい。
nvmのインストール先と設定
install.shが実行されるとユーザーのホームディレクトリに.nvmディレクトリが作成され、ここにnvmコマンドのファイルが格納されます。
そして、ユーザーがログイン時に読み込む設定ファイルにnvmの設定が書き込まれます。
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
この設定ファイルは、Linux, Macの種類でいろいろあるので、
~/.bashrc
~/.bash_profile
~/.zshrc
~/.profile
install.shはこのうちのどれか、すでにあるファイルに書き込みます。
設定ファイルへの書き込み処理ができないことがまれにあるようです。
そのときは手動でこの設定を入れて、ターミナルを開き直すか、
source [設定ファイル]
を実行します。
最後に、nvmでダウンロードしたNode.jsは、
/.nvm/versions/node/(バージョン番号)
に格納されます。
nvmアンインストール
nvmはリポジトリからインストールするパッケージではなく、シェルコマンドのファイルです。
アンインストール・コマンドはありません。手動削除です。
rm -rf "$NVM_DIR"
nvmのインストール先をごそっと削除します。(自分で変更しないかぎり~/.nvm)
そして、ユーザーの設定ファイル(.bashrcなど)に追記された部分を手動で削除します。
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
("source [設定ファイル]" の実行を忘れずに。)
nvmの使い方
nvmの使い方はかんたんです。サブコマンドの数も少ないのですぐに覚えられるでしょう。
作業はすべてユーザー権限で行います。
(あたりまえですがユーザーごとにインストールしているので。)
インストール可能なNode.js表示
nvm ls-remote
v0.1.14
.
.
iojs-v3.3.1
.
.
v6.17.0 (LTS: Boron)
v6.17.1 (Latest LTS: Boron)
.
.
v12.14.0 (LTS: Erbium)
-> v12.14.1 (Latest LTS: Erbium)
.
.
v13.6.0
("->" はいま有効になっているNode.js)
Node.jsダウンロード・インストール
nvm install node
Downloading and installing node v13.6.0...
Downloading https://nodejs.org/dist/v13.6.0/node-v13.6.0-linux-x64.tar.xz...
################################################################################################################# 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v13.6.0 (npm v6.13.4)
nvm install --lts
Installing latest LTS version.
Downloading and installing node v12.14.1...
Downloading https://nodejs.org/dist/v12.14.1/node-v12.14.1-linux-x64.tar.xz...
################################################################################################################# 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v12.14.1 (npm v6.13.4)
nvm install 12.9.1
Downloading and installing node v12.9.1...
Downloading https://nodejs.org/dist/v12.9.1/node-v12.9.1-linux-x64.tar.xz...
################################################################################################################# 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v12.9.1 (npm v6.10.2)
最新版と安定版はバージョン番号じゃなくてもいいです。
(なぜ安定版はハイフン2個(--)なのかは不明。)
また、複数指定もできます。
nvm install 12.9.1, 12.8.1, 12.7.1
このコマンドはインストールするだけでなく、有効なNode.jsになります。
(最後の"Now using node xxxx"メッセージ。)
インストール済みNode.js表示
nvm ls
v12.9.1
v12.14.1
-> v13.6.0
system
"->"が、いま使っているNode.jsです。"system"はOSシステムにインストールされているNode.jsです。
システムのNode.js |
---|
/usr/bin/node or /usr/local/bin/node |
Node.jsバージョン切り替え
nvm use node
Now using node v13.6.0 (npm v6.13.4)
nvm use lts/*
Now using node v12.14.1 (npm v6.13.4)
"lts/*"は"--lts"でもできます。
(このへんがいまいち。統一してほしい。)
nvm use 13.6.0
Now using node v13.6.0 (npm v6.13.4)
"nvm use ***"を使うことはあまりありません。いちいちバージョンを指定するのがめんどうだからです。
.nvmrcファイルを使います。
OSシステムのNode.jsにも切り替えできる
バージョン切り替えには.nvmrcファイルを使う
.nvmrcは、Node.jsバージョンをあらかじめ決めておく設定ファイルです。Node.jsバージョン影響下のトップ・ディレクトリに配置します。
配置するディレクトリに移動して次のコマンドを実行しましょう。
(ユーザーごとならユーザーホーム。またはプロジェクトのトップ・ディレクトリ)
echo "system" > .nvmrc
echo "node" > .nvmrc
echo "--lts" > .nvmrc
echo "system" > .nvmrc
echo "13.6.0" > .nvmrc
(echoで出力した文字列を.nvmrcに書き込む。(上書き))
vimでファイルを作成してもいいですが、コマンドのほうが速いのでそうしました。
さいごに、.nvmrcのあるディレクトリでuseサブコマンドを実行します。
nvm use
バージョン指定なしで実行すると、.nvmrcファイルを探してそのバージョンを使います。
.nvmrcファイルが無いところで実行するとエラーになります。
nvm use
No .nvmrc file found
Please see `nvm --help` or https://github.com/nvm-sh/nvm#nvmrc for more information.
nvmの自動切り替えにはdirenvが必要
nvmの惜しいところですが、設定ファイル.nvmrcの機能はNode.jsバージョンの自動切り替えまではしてくれません。
"node" "npm" "npx"を使う前に1回、"nvm use"の実行が必要です。
(これが意外とうっとうしい。)
そこで、自動切り替えにはdirenvを使います。.nvmrcと同じディレクトリに.envrcファイルを配置します。
(direnvのインストール方法・使い方は省略。)
実践 nvm + direnv
じっさいに環境を作ってみましょう。ディレクトリ構成です。
/home/ubuntu
├ .nvmrc
├ .envrc
└ project1
├ .nvmrc
└ .envrc
ubuntuユーザーのホーム.nvmrcでユーザーのNode.js、project1/.nvmrcでプロジェクトのNode.jsのバージョンを指定します。
cd
echo "12.9.1" > .nvmrc
echo "node" > project1/.nvmrc
次にdirenvの設定ファイル(.envrc)を作ります。
source $NVM_DIR/nvm.sh
nvm use
direnv実行時にはnvmコマンドが認識されません。
source ~/.nvm/nvm.sh
を実行しないと
./.envrc: line 1: nvm: command not found
が発生します。
(なぜ認識されないのか不明。.bashrcは読み込まれてるはずなんだけど...)
.envrcを.nvmrcのあるすべてのディレクトリにコピーします。そしてdirenvの実行許可を行います。
cd
direnv allow
cd project1
direnv allow
"direnv allow"は1回だけ実行すればOK。
正確には、.envrcの作成・編集後に実行が必要。
新しいターミナルを開きます。
direnv: loading .envrc
Found '/home/ubuntu/.nvmrc' with version <12.9.1>
Now using node v12.9.1 (npm v6.10.2)
direnv: export ~NVM_BIN ~PATH
ユーザーのNode.jsバージョンが12.9.1になりました。プロジェクトディレクトリへ移動します。
cd project1
direnv: loading .envrc
Found '/home/ubuntu/project1/.nvmrc' with version <node>
Now using node v13.6.0 (npm v6.13.4)
プロジェクトは最新版になりました。またホームに戻りましょう。
cd
direnv: loading .envrc
Found '/home/ubuntu/.nvmrc' with version <12.9.1>
Now using node v12.9.1 (npm v6.10.2)
direnv: export ~NVM_BIN ~PATH
バージョンが元に戻りました。
direnv: error .envrc is blocked. Run direnv allow
to approve its content.
が発生したら、そのディレクトリで
direnv allow
を実行してください。
Node.jsアンインストール・削除
nvm uninstall node
nvm uninstall --lts
nvm install 12.9.1
/.nvm/versions/node/(バージョン番号)のディレクトリが削除されます。
その他のコマンド
これだけでも十分作業できますが、ほかにもnvmサブコマンドがあります。
こちらを参照してください。