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)です。
OSシステムにインストールするので"-g"をつけましょう。
これでnコマンドが使えるようになりました。
nの使い方
nの使い方はシンプルです。コマンドの種類もそう多くないのですぐに覚えます。
ここでは、nでバージョン管理する最小限のコマンドだけをご紹介します。
管理者権限(root)で行います。ユーザー権限では、状態表示・確認はできますが、肝心のNode.jsインストール・バージョン切り替えはできません。
ダウンロード可能なバージョン表示
ダウンロードしてインストール
最新版や安定版(の最新)はバージョン番号じゃなくてもできます。
このコマンドはダウンロードするだけじゃありません。使うNode.jsのバージョンも変更します。
バージョンを確認すると、ダウンロード・インストールしたバージョンになるはずです。
使用バージョンの切り替え
切り替えはシンプルです。nだけをコマンド実行します。
動きをアニメーションで確認しましょう。
- nを入力してEnter
- ↑↓で変更するバージョンを選んでEnter(vimのj, kでもできる)
- node -v でバージョン確認
ダウンロード済みNode.jsのリスト表示
Node.jsの削除
ダウンロードした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が入っている。)