前言
在同時(shí)開發(fā)多個(gè)項(xiàng)目時(shí),我們經(jīng)常需要在各個(gè)項(xiàng)目中切換,而各個(gè)項(xiàng)目很可能使用不同的 Node.js 版本,如何維護(hù)多個(gè) Node.js 版本以及在多個(gè)項(xiàng)目之間切換 Node.js 成為了一件麻煩的事情。
雖然目前市面上已經(jīng)有了諸如 nvm、n 之類的版本管理工具,但是它們各有各自的問題。
nvm 是目前最流行的 Node.js 版本管理工具,但其不能跨平臺(tái)、運(yùn)行緩慢的問題詬病已久,每次啟動(dòng) shell 時(shí)加載 nvm 都是一次漫長(zhǎng)的煎熬。
n 作為一個(gè)使用 node 編寫的 Node.js 版本管理工具,自身便依賴于 Node.js ,這就牽扯出了經(jīng)典的蛋生雞還是雞生蛋問題;再加上它經(jīng)常需要使用 sudo 來執(zhí)行,我們只能將它放棄。
fnm 的優(yōu)勢(shì)
什么是 fnm 呢? 即 Fast Node Manager,從名字上就能感覺到它很快;沒錯(cuò),它的確非常快!
它的特點(diǎn)如下:
- 跨平臺(tái)運(yùn)行,支持 Linux / Windows / macOS
- 使用 Rust 編寫,單文件即可運(yùn)行,無需其他依賴
- 兼容 .node-version?和 .nvmrc 文件
安裝
一鍵安裝命令(Linux / macOS):
curl -fsSL https://fnm.vercel.app/install | bash
使用包管理器安裝:
# Linux / macOS
brew install fnm
# Windows
winget install Schniz.fnm
如果網(wǎng)絡(luò)環(huán)境受限,也可以手動(dòng)下載安裝。從 Github Release 頁(yè)面下載對(duì)應(yīng)系統(tǒng)和架構(gòu)的二進(jìn)制文件壓縮包,解壓后將二進(jìn)制文件移動(dòng)到自己放置工具的文件夾下,然后將對(duì)應(yīng)路徑配置到環(huán)境變量的 Path 中,確保能在 shell 中執(zhí)行 fnm 命令即可。
配置
安裝完 fnm 后,還需要配置 shell 來提供相關(guān)環(huán)境變量,以下是幾種不同 shell 的配置方式:
Bash
# 向用戶目錄下的 .bashrc 文件中追加以下內(nèi)容
eval "$(fnm env --use-on-cd --shell bash)"
ZSH
# 向用戶目錄下的 .zshrc 文件中追加以下內(nèi)容
eval "$(fnm env --use-on-cd --shell zsh)"
PowerShell
# 向 ~\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 文件中追加以下內(nèi)容
# 如果文件不存在可以手動(dòng)創(chuàng)建
fnm env --use-on-cd --shell powershell | Out-String | Invoke-Expression
使用
fnm 最常用的命令包含如下幾個(gè)
fnm list
# 該命令查看本地已安裝的所有 Node.js 版本,fnm list-remote 可以查看遠(yuǎn)端一共有哪些 Node.js 版本可供安裝
fnm install 版本號(hào)
# 該命令安裝指定版本的 Node.js ,如 fnm install 18.2,也可以使用 fnm install --lts 來安裝最新的 lts 版本
fnm use 版本號(hào)
# 該命令切換當(dāng)前 shell 所使用的 Node.js 版本,只在當(dāng)前 shell 生效,對(duì)全局 Node.js 版本沒有影響
fnm default 版本號(hào)
# 該命令設(shè)置全局默認(rèn) Node.js 版本
fnm --help
# 該命令可查看 fnm 支持的所有命令
使用時(shí)可以在項(xiàng)目根目錄中新增 .node-version 或 .nvmrc 文件,并向其中寫入要使用的 Node.js 版本號(hào);這樣當(dāng)在 shell 中切換到對(duì)應(yīng)項(xiàng)目根目錄時(shí),fnm 會(huì)自動(dòng)切換到文件中指定的 Node.js 版本,并在終端中提示當(dāng)前運(yùn)行的 Node.js 版本。