Node.jsを複数インストールしてバージョン管理するツールはたくさんありますが、npmのnパッケージはちょっと特殊です。
一般的なツールはシステム(OS全体)のNode.jsから新たにNode.jsをインストールするんですが、nパッケージはシステムのNode.jsのバージョンを管理できます。
ほかのNode.jsバージョン管理ツールとのちがい
nvm
nodebrew
nodenv
など、Node.jsを複数インストールして、Node.jsのバージョンを使い分けるツールはたくさんあります。
これらのツールは、インストール先がユーザーのホームディレクトリになりますが、nだけはちがいます。
nは複数のNode.jsをOS全体(システム)にインストールします。nでバージョンを管理するのは『システムのNode.js』です。
nにかぎらず、Node.jsのバージョン管理ツールは
Node.jsパッケージ管理ツール | npm |
Node.js実行ツール | npx |
もセットで管理します。
システムのNode.jsのバージョンを管理するならn
システム全体でひとつのNode.jsを使うとき、nはほかのバージョン管理ツールよりも最適です。
nのコマンド一発で、システム配下のアプリのNode.jsのバージョンを一括で管理できるので。
(そういう場面に出会ったことはないが...)
逆に、OSのユーザー、アプリごとにNode.jsのバージョンがちがうときは使えません。ほかのツールを検討すべきです。
Windowsで使うための工夫
Windowsでnを使うには、そのままでは無理です。
(そもそもインストールできない。)
Windowsで使うにはちょっと工夫が必要で、
WSL(Windows Subsystem for Linux)を使う。
or
パッケージマネージャーアプリ(Chocolateyなど)経由で使う。
の2択。Chocolateyはコマンドからパッケージを管理するアプリで、Windows版のyum, apt, brewみたいなもの。
Windowsでは、Linuxを仮想的に使うかLinuxもどきの操作をするアプリが必要なんですね?
Macの中身はUnixです。Linuxと親和性があります。
(コマンド操作が似ている。)
MacとLinuxは遠い親戚みたいなもの。
nを使ったNode.jsの構成
nはnpmのパッケージです。Node.jsを複数インストールして管理するのにNode.jsが必要です。
(なんのこっちゃ?)
大元のNode.js, npmはnの管理下になりません。nを使うNode.jsの構成は
n管理外 | /usr/bin ひとつだけ。 |
n管理内 | /usr/local/bin 複数可。 |
になります。
nのインストール
まずは、nパッケージをインストールするための大元のNode.jsをインストールします。
次にnpmコマンドでnパッケージをインストールしましょう。作業はすべて管理者権限(root)です。
npm install n -g
/usr/local/bin/n -> /usr/local/lib/node_modules/n/bin/n
+ n@6.1.3
OSシステムにインストールするので"-g"をつけましょう。
これでnコマンドが使えるようになりました。
nの使い方
nの使い方はシンプルです。コマンドの種類もそう多くないのですぐに覚えます。
ここでは、nでバージョン管理する最小限のコマンドだけをご紹介します。
管理者権限(root)で行います。ユーザー権限では、状態表示・確認はできますが、肝心のNode.jsインストール・バージョン切り替えはできません。
ダウンロード可能なバージョン表示
n ls-remote
Listing remote... Displaying 20 matches (use --all to see all).
13.6.0
13.5.0
.
.
12.8.0
ダウンロードしてインストール
n 13.2.0
installing : node-v13.2.0
mkdir : /usr/local/n/versions/node/13.2.0
fetch : https://nodejs.org/dist/v13.2.0/node-v13.2.0-linux-x64.tar.gz
installed : v13.2.0 (with npm 6.13.1)
最新版や安定版(の最新)はバージョン番号じゃなくてもできます。
n latest
installing : node-v13.6.0
mkdir : /usr/local/n/versions/node/13.6.0
fetch : https://nodejs.org/dist/v13.6.0/node-v13.6.0-linux-x64.tar.gz
installed : v13.6.0 (with npm 6.13.4)
n lts
installing : node-v12.14.1
mkdir : /usr/local/n/versions/node/12.14.1
fetch : https://nodejs.org/dist/v12.14.1/node-v12.14.1-linux-x64.tar.gz
installed : v12.14.1 (with npm 6.13.4)
このコマンドはダウンロードするだけじゃありません。使うNode.jsのバージョンも変更します。
node -v
v12.14.1
バージョンを確認すると、ダウンロード・インストールしたバージョンになるはずです。
使用バージョンの切り替え
切り替えはシンプルです。nだけをコマンド実行します。
n
動きをアニメーションで確認しましょう。
- nを入力してEnter
- ↑↓で変更するバージョンを選んでEnter(vimのj, kでもできる)
- node -v でバージョン確認
ダウンロード済みNode.jsのリスト表示
n ls
node/12.14.1
node/13.2.0
node/13.6.0
Node.jsの削除
n rm 12.14.1 13.2.0
ダウンロードしたNode.jsを削除します。rmサブコマンドはLinuxのrmと同じ使い方なので複数削除もできます。
ダウンロード先のバージョン・ディレクトリごと削除します。
ダウンロード先 | /usr/local/n/versions/node/(バージョン番号)/ |
その他の使い方
ほかにもnのサブコマンドはあります。Node.jsの公式ドキュメントを参照ください。
nの切り替えはファイルのコピー
nのバージョン切り替えは、ダウンロードしたファイルを /usr/local/binなどへコピーして行います。
(すでにコピー先にあるファイルは削除してからコピー)
コピー元 | /usr/local/n/versions/node/(バージョン番号)/ |
コピー先 | /usr/local/bin /usr/local/lib /usr/local/include |
/usr/local/binには3つのコマンドとnpmでインストールしたコマンドがコピーされますが、シンボリックリンクを使うので、lib, includeも変更します。
コマンド | ファイル内容 |
---|---|
node | 実行ファイル |
npm npx | /usr/local/lib/node_modules/へのシンボリックリンク |
n (npmパッケージ) | /usr/local/lib/node_modules/へのシンボリックリンク |
ユーザー権限で実行できない理由はこれ。/usr/local/**でファイル削除・コピーするので、ユーザー権限では "Permission denied" が発生します。
nで管理するNode.jsの実行コマンドはコピー先の /usr/local/bin/** です。ダウンロードしたNode.jsのコマンドを直接実行しているわけではありません。
(環境変数PATHに/usr/local/binが入っている。)