
fnm 快速上手一款用 Rust 寫的 Node.js 版本管理器3 分鐘配好自動切換【免費(fèi)下載鏈接】fnm Fast and simple Node.js version manager, built in Rust項(xiàng)目地址: https://gitcode.com/gh_mirrors/fn/fnm同時(shí)維護(hù)幾個(gè)前端項(xiàng)目時(shí)你多半遇到過這種局面A 項(xiàng)目跑 Node 16B 項(xiàng)目必須用 20打開終端得先回憶各項(xiàng)目要哪個(gè)版本切完目錄又容易忘記重新切換。fnm 是一個(gè)用 Rust 編寫的 Node.js 版本管理器它能讀取項(xiàng)目目錄里的.node-version文件并自動完成切換讓你少跑一條命令。讀完本文你會裝好 fnm、配好 shell并了解三個(gè)省掉手動切換的進(jìn)階配置。fnm 是什么3 個(gè)值得換過去的理由單文件二進(jìn)制啟動即就緒fnm 不依賴任何 shell 腳本一條命令裝完就能用新打開 shell 時(shí)幾乎沒有額外開銷。如果你用過 nvm知道每次啟動 shell 都要加載一長串腳本fnm 的做法是把它壓縮成一個(gè) Rust 二進(jìn)制。兼容 nvm 的項(xiàng)目約定它識別.node-version和.nvmrc文件遷移不用改項(xiàng)目配置目錄里連這兩個(gè)文件都沒有時(shí)默認(rèn)還會讀package.json的engines.node可用--resolve-enginesfalse關(guān)閉??缙脚_macOS、Windows、Linux 都支持bash、zsh、fish、PowerShell 均有對應(yīng)的初始化方式。倉庫的 benchmarks/ 目錄里還附帶了基于 hyperfine 的對比腳本basic/fnm 對 basic/nvm覆蓋安裝 切換 驗(yàn)證的完整流程方便你自行驗(yàn)證。從安裝到第一次切換只需 3 步環(huán)境準(zhǔn)備與安裝fnm 本身不需要 Node.js 環(huán)境選一個(gè)你順手的包管理器即可brew install fnm # macOS / Linux winget install Schniz.fnm # Windows cargo install fnm # 跨平臺需要 Rust 環(huán)境這些方式裝出來的都是同一個(gè)單文件二進(jìn)制幾秒即可完成README 里還給了官方安裝腳本和 release 二進(jìn)制兩種備選。shell 初始化fnm 通過fnm env輸出一段環(huán)境配置需要你的 shell 執(zhí)行它。把下面這行寫進(jìn)~/.bashrczsh 用戶把--shell zsh并寫進(jìn)~/.zshrceval $(fnm env --use-on-cd --shell bash)這里有兩個(gè)關(guān)鍵參數(shù)顯式傳--shell可以跳過運(yùn)行時(shí)的 shell 推斷更快也更穩(wěn)--use-on-cd會注冊一個(gè)目錄變更鉤子你每次cd進(jìn)項(xiàng)目時(shí)自動切換對應(yīng)版本官方文檔將其列為強(qiáng)烈推薦建議一開始就加上。安裝并切換第一個(gè)版本fnm install 20 # 安裝最新的 Node 20.x fnm use 20 # 當(dāng)前 shell 切換到 20.x node -v # 確認(rèn)生效版本號支持部分匹配寫20會解析到已知的最新 20.x寫完整版本號或lts/iron這類 LTS 名稱也可以。fnm 常用命令速查8 條高頻操作命令作用備注fnm install 20安裝最新 Node 20.x接受18、20.10.0、lts/NAME等形式fnm install --lts安裝最新 LTS 版本等價(jià)于直接指定 LTSfnm use 20當(dāng)前 shell 切換到 20.x未安裝時(shí)加--install-if-missingfnm use按當(dāng)前目錄版本文件切換讀.node-version/.nvmrcfnm ls列出本地已安裝版本list的別名fnm ls-remote --lts查詢遠(yuǎn)端 LTS 版本可加--filter 20做范圍過濾fnm default 20設(shè)置默認(rèn)版本不帶參數(shù)運(yùn)行時(shí)顯示當(dāng)前默認(rèn)fnm exec --using20 npm i用指定版本跑單條命令不改變當(dāng)前 shell 狀態(tài)進(jìn)階配置3 個(gè)讓你少動手的設(shè)置monorepo 里的遞歸版本查找默認(rèn)情況下fnm use不帶參數(shù)時(shí)只查當(dāng)前目錄local策略進(jìn)子包目錄就會報(bào)找不到版本文件。把初始化行改成eval $(fnm env --use-on-cd --version-file-strategyrecursive --shell bash)配完后在repo/packages/my-package里執(zhí)行fnm use會向上找到倉庫根目錄的.node-version并切到那個(gè)版本子目錄工作不再需要單獨(dú)放版本文件。固定默認(rèn)版本與版本別名新開 shell 沒有版本文件時(shí)走的就是默認(rèn)版本再給常用版本起個(gè)名字輸入更短fnm default 20 # 默認(rèn)版本設(shè)為 20.x fnm alias 20 work # 之后 fnm use work 即可切換別名用fnm unalias work刪除。團(tuán)隊(duì)共享的版本名如legacy、stable起好后新人照抄就行。裝版本時(shí)順手啟用 Corepackfnm install --corepack-enabled --lts加上--corepack-enabled后每次新裝 Node 版本 fnm 都會替你執(zhí)行corepack enable省去手動開啟 pnpm/yarn 的一步。官方標(biāo)注該功能為實(shí)驗(yàn)性介意的話可以保持默認(rèn)關(guān)閉。新手常見問題新終端不認(rèn) fnm 命令或 node 版本沒變大概率是fnm env那行沒寫進(jìn)當(dāng)前 shell 對應(yīng)的配置文件bash 看.bashrczsh 看.zshrc確認(rèn)寫對了重新開一個(gè)終端。fnm use不帶參數(shù)報(bào) Cant find version in dotfile默認(rèn)策略只查當(dāng)前目錄按上文改成--version-file-strategyrecursive即可。fnm use 20提示版本不存在該版本還沒裝用fnm use 20 --install-if-missing一條命令裝好再切。相關(guān)資源完整命令參考docs/commands.md全部配置開關(guān)說明docs/configuration.md用--node-dist-mirror裝 nightly 版本docs/nightly.md延伸閱讀版本解析邏輯在 src/choose_version_for_user_input.rs版本文件讀取在 src/version_files.rs各 shell 的適配實(shí)現(xiàn)在 src/shell/把版本切換從每次都要想一步變成cd 進(jìn)去就發(fā)生是 fnm 最核心的價(jià)值。現(xiàn)在只需做一件事打開你的 shell 配置文件把上面那一行eval寫進(jìn)去重啟終端然后fnm install裝一個(gè)你手頭的版本試試?!久赓M(fèi)下載鏈接】fnm Fast and simple Node.js version manager, built in Rust項(xiàng)目地址: https://gitcode.com/gh_mirrors/fn/fnm創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考