nodenvのインストール手順のメモ
pythonのpyenvと同様にNode.jsのバージョン管理システムのnodenvを使用する。
(両方インストールするくらいならanyenvを使えという説もあるが…)
他にもnvmやnodebrewなんてのもあるらしい。nodenvはディレクトリごとにローカルバージョンを設定できてとても便利なのでおススメ。
nodeenv(eが2つ)という超マイナーなのもあるけど、間違わないように。
Node.jsはリポジトリにバイナリパッケージが用意されているバージョンはバイナリインストールできる。用意されていないバージョンはソースからコンパイルされるが、必要なライブラリ類のインストールなど必要。ここでは手順は割愛。
インストールに必要なモジュールをインストールする。インストール済みならスキップして可。
sudo apt install git
nodenv本体をインストール。
export NODENV_ROOT=/proj/.nodenv # 環境に合わせて修正してね
git clone git://github.com/nodenv/nodenv.git ${NODENV_ROOT}
git clone https://github.com/nodenv/node-build.git ${NODENV_ROOT}/plugins/node-build
nodenvの設定のため、~/.bashrc に以下を追加。
export NODENV_ROOT=/proj/.nodenv # 環境に合わせて修正してね
export PATH=$NODENV_ROOT/bin:$PATH
eval "$(nodenv init -)"
ここで設定を有効にするためにターミナルを開きなおす。
nodenv install -l
バイナリインストールできるか確認したい場合は以下。
バイナリがなければソースからコンパイルされるが、時間がかかるのが嫌な場合に(大抵のバージョンはバイナリが用意されているようだ)。
grep -r `uname -m` ${NODENV_ROOT}/plugins/node-build/share/
# ただし、uname -m が x86_64 | amd64 | i686-64 のときはx64に置き換える
nodenv install 10.15.3
nodenv global 10.15.3
念のため指定したバージョンが実行されることを確認
node -v
pyenvと異なり、nodenvは仮想環境をサポートしていない。
Node.jsはローカルモジュールのインストールが簡単なので、仮想環境を構築しなくても個々のディレクトリでローカルモジュールをインストールすることで仮想環境相当のことが実現できる。
「npmが古い~」と言われる前にバージョンアップ。
npm install -g npm
ディレクトリ毎に使用するバージョンを指定するには(例えば、このディレクトリ下で作業するプロジェクトは9.11.1を使う、みたいな時)
そのディレクトリで以下のように実行する。
指定はそのディレクトリ直下だけでなく、その子ディレクトリ、孫ディレクトリ、・・・で有効。
shellを閉じても設定は残る。
nodenv local <バージョン名>
そのshellだけ使用するバージョンを変更したい場合は、以下のよう実行する。
nodenv shell <バージョン名>
別のターミナルでの実行には影響しない。
Node.jsの新しいバージョンがリリースされ、それをインストールしたい場合など、nodenvのバージョンアップが必要。
下記その2の方がおススメ。こっちの手順は参考までに。
cd ${NODENV_ROOT}
git pull
cd ${NODENV_ROOT}/plugins/node-build/
git pull
実行後、ターミナルを開きなおす
nodenv-updateをインストールしておけば、nodenv update
を実行するだけですべてのプラグインを含めてバージョンアップしてくれるので、おススメ。インストール方法は下記。
git clone https://github.com/nodenv/nodenv-update.git ${NODENV_ROOT}/plugins/nodenv-update
ちょっとだけ使い方一覧。
nodenv [global | local | shell] system
nodenv version
nodenv versions
現在の状態で使用されるバージョンの先頭に「*」 が付く。
nodenv --version
nodenv commands
nodenv help
# 各コマンドのヘルプを表示するには以下
nodenv help <command>