fnm 安裝與常用指令完整教學 | 比 nvm 快 40 倍的 Node.js 版本管理器
用了 nvm 這麼久,直到打開終端機等了三秒 shell 才載入,才知道原來版本管理器也可以很慢。fnm 是同一件事的 Rust 版本——快得幾乎感覺不到它在。
fnm 是什麼,為什麼值得換
fnm(Fast Node Manager) 是用 Rust 寫的 Node.js 版本管理器,指令設計和 nvm 幾乎一模一樣,但啟動速度快了 40 倍以上。
跨平台(macOS、Windows、Linux)、支援 .nvmrc 和 .node-version——就是 nvm 的平替,但不會拖慢你的終端機。
安裝 fnm
macOS(推薦用 Homebrew)
brew install fnm
Linux / macOS(腳本安裝)
curl -fsSL https://fnm.vercel.app/install | bash
Windows
# Winget
winget install Schniz.fnm
# 或 Scoop
scoop install fnm
# 或 Chocolatey
choco install fnm
升級 fnm
# macOS
brew upgrade fnm
# 其他系統(--skip-shell 避免重複寫入設定檔)
curl -fsSL https://fnm.vercel.app/install | bash -s -- --skip-shell
Shell 設定(必做,否則指令不生效)
安裝完 fnm 本體只是第一步——還要讓 shell 認識它,自動版本切換才能運作。
Zsh(.zshrc)
eval "$(fnm env --use-on-cd --shell zsh)"
Bash(.bashrc)
eval "$(fnm env --use-on-cd --shell bash)"
Fish(~/.config/fish/conf.d/fnm.fish)
fnm env --use-on-cd --shell fish | source
PowerShell
fnm env --use-on-cd --shell powershell | Out-String | Invoke-Expression
--use-on-cd這個參數很關鍵——加了之後,進入有.nvmrc或.node-version的目錄,版本會自動切換,完全不用手動fnm use。
常用指令一覽表
安裝 Node.js
| 指令 | 說明 |
|---|---|
fnm install <版本號> | 安裝特定版本,例如 fnm install 20.11.0 |
fnm install --lts | 安裝最新 LTS 版本 |
fnm install latest | 安裝最新版本 |
切換版本
| 指令 | 說明 |
|---|---|
fnm use <版本號> | 切換到指定版本 |
fnm use --lts | 切換到最新 LTS |
fnm use latest | 切換到最新版本 |
fnm default <版本號> | 設定全域預設版本 |
查詢版本
| 指令 | 說明 |
|---|---|
fnm list 或 fnm ls | 列出本機已安裝的所有版本 |
fnm list-remote 或 fnm ls-remote | 列出所有可安裝的遠端版本 |
fnm current | 顯示目前使用的版本 |
node -v | 確認 Node.js 版本 |
fnm --version | 顯示 fnm 本身版本 |
移除版本
| 指令 | 說明 |
|---|---|
fnm uninstall <版本號> | 移除指定版本 |
補全設定
fnm completions --shell zsh # 輸出 Zsh 補全腳本
fnm completions --shell bash
fnm completions --shell fish
fnm completions --shell powershell
專案版本鎖定:.node-version
進到任何專案目錄前,可以用一行指令把目前版本寫進 .node-version:
node --version > .node-version
之後只要 shell 設定了 --use-on-cd,進這個目錄就會自動切版本——不用再想「這個專案跑哪個 Node?」
fnm vs nvm:快在哪
| 比較項目 | fnm | nvm |
|---|---|---|
| 語言 | Rust | Shell Script |
| Shell 啟動速度 | 極快(< 1ms) | 慢(~100ms+) |
| 跨平台 | macOS / Linux / Windows | macOS / Linux |
| 自動版本切換 | ✅ --use-on-cd | ✅ 需額外設定 |
支援 .nvmrc | ✅ | ✅ |
支援 .node-version | ✅ | ❌ 原生不支援 |
| 指令相容性 | 幾乎與 nvm 一致 | — |
nvm 沒有壞,但如果你的終端機每次開啟都要等一秒多,那個時間是 nvm 在 source shell script。fnm 的 Rust binary 啟動幾乎是零感知。
FAQ
Q:fnm 和 nvm 的指令差很多嗎?
幾乎一樣。fnm install、fnm use、fnm ls 的邏輯和 nvm 完全對應,大部分人切換過來不需要重新學習。
Q:現有的 .nvmrc 可以繼續用嗎?
可以。fnm 同時支援 .nvmrc 和 .node-version,不需要修改現有專案的設定。
Q:nvm 安裝的版本可以移過來嗎?
不行直接移,但可以用 fnm install 重新安裝同版本。因為兩者的儲存路徑不同,全域 package 也需要重裝。
Q:fnm default 和 nvm alias default 是一樣的東西嗎?
是的,功能相同——設定沒有 .node-version 或 .nvmrc 時預設啟用哪個版本。
Q:Windows 上可以用嗎? 可以,是 fnm 比 nvm 明顯強的地方之一。nvm 在 Windows 上需要另外裝 nvm-windows,fnm 原生跨平台。
移除 fnm
刪掉 ~/.fnm 資料夾,再把 shell 設定檔(.zshrc、.bashrc 等)裡加進去的那行 eval "$(fnm env ...)" 移除就完成了。
換 fnm 的成本幾乎是零——指令相容、設定一行、速度直接感受到。如果你的終端機還在等 nvm 載入,現在是個好時機。