ツイート
シェア
LINEで送る
B! はてぶでブックマーク
Pocketでブックマーク
RSSフィード

nvm, Node.jsバージョンをユーザー・ディレクトリごとに管理する

Node.js image
イラストダウンロードサイト【イラストAC】
の画像をもとに加工しています。

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バージョン影響下のトップ・ディレクトリに配置します。

配置するディレクトリに移動して次のコマンドを実行しましょう。

(ユーザーごとならユーザーホーム。またはプロジェクトのトップ・ディレクトリ)

OSシステムNode.jsを使う
echo "system" > .nvmrc
最新版を使う
echo "node" > .nvmrc
安定版の最新を使う
echo "--lts" > .nvmrc
OSシステムのNode.jsを使う
echo "system" > .nvmrc
指定バージョンを使う
echo "13.6.0" > .nvmrc

(echoで出力した文字列を.nvmrcに書き込む。(上書き))

vimでファイルを作成してもいいですが、コマンドのほうが速いのでそうしました。

さいごに、.nvmrcのあるディレクトリでuseサブコマンドを実行します。

.nvmrcのバージョン切り替え
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)を作ります。

.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サブコマンドがあります。

こちらを参照してください。

前の投稿
npm, nパッケージでシステムのNode.jsのバージョン管理をする
Node.js, npxコマンドってなんだ? たんなるnpm runの代わりじゃない。
次の投稿
コメントを残す

*