自動で Node.js のバージョンを切り替えてくれる fnm を使ってみた

Node.js のバージョン管理といえば nodenv とか nvm があるけど、その新しい仲間がまた出てきたみたい。

それが fnm くん。Rust製で、マルチプラットフォームかつ高速に動くのが売りらしい。

Node.js のバージョンを指定してインストールできる

fnm install --latest # 最新版をインストールする
fnm install --lts # 最新のLTS版をインストールする
fnm install 18 # v18系の最新版をインストールする
fnm install 19.5.0 # 見たまま

特定のバージョンを使用する

fnm use 18 # 上でインストールした v18系を使う

自動バージョン切り替え

面白いのは、ディレクトリに応じて自動的にNode.jsのバージョンを切り替えてくれること。 ファイル名 .node-version というテキストファイルに、バージョン番号を入れておくだけ。 ちなみに .nvmrc ファイルにも対応している。

> node --version
v19.5.0

という状況だとして、

node --version > .node-version

とすれば、次にこのディレクトリに入る時には自動でバージョンを切り替えてくれる。

fnm自体のインストール

macOS/Linux の方は

brew install fnm

Windows の方は scoop もしくは chocolatey を使ってこのように

scoop install fnm
# もしくは
choco install fnm

Rust製なのでパッケージマネージャー cargo を使ってもインストールできる

cargo install fnm

そのほか、ビルド済みバイナリーもあるとのこと。

使う準備

動かすためには、シェルに環境変数を読み込ませる必要があるみたい。 以下の一行を、プロファイル(.bashrc.zshrcPowershell のプロファイル)に含めておくこと。

eval "$(fnm env --use-on-cd)" # bash もしくは zsh の場合
fnm env --use-on-cd | Out-String | Invoke-Expression # Powershell の場合

そのほかのコマンド

# インストールされているバージョンの一覧を取得 (systemはfnmで入れたものではなく、最初からリストにあった。fnm外でインストールしたものを使うときに使うのかな?)
> fnm list
* v16.19.0
* v18.13.0 lts-latest
* v19.5.0 default
* system

# 現在使用中のバージョンを表示
> fnm current
v19.5.0

# インストール可能なバージョンの一覧を表示
> fnm list-remote
(長いので省略)

# 特定のバージョンに別名を付けられる
> fnm alias 19 hogehoge # とすると、

> fnm list
* v16.19.0
* v18.13.0 lts-latest
* v19.5.0 default, hogehoge # ←名前が追加されて、
* system

> fnm use hogehoge
Using Node for alias hogehoge # その名前で呼び出せる。

> fnm unalias hogehoge # 別名を消すときはこうする

今日はここまで。