☰
fnm 快速上手:一款用 Rust 写的 Node.js 版本管理器,3 分钟配好自动切换
2026/10/29 1:48:08 网站建设 项目流程

fnm 快速上手:一款用 Rust 写的 Node.js 版本管理器,3 分钟配好自动切换

【免费下载链接】fnm🚀 Fast and simple Node.js version manager, built in Rust项目地址: https://gitcode.com/gh_mirrors/fn/fnm

同时维护几个前端项目时,你多半遇到过这种局面:A 项目跑 Node 16,B 项目必须用 20,打开终端得先回忆各项目要哪个版本,切完目录又容易忘记重新切换。fnm 是一个用 Rust 编写的 Node.js 版本管理器,它能读取项目目录里的.node-version文件并自动完成切换,让你少跑一条命令。读完本文,你会装好 fnm、配好 shell,并了解三个省掉手动切换的进阶配置。

fnm 是什么:3 个值得换过去的理由

  • 单文件二进制,启动即就绪:fnm 不依赖任何 shell 脚本,一条命令装完就能用,新打开 shell 时几乎没有额外开销。如果你用过 nvm,知道每次启动 shell 都要加载一长串脚本,fnm 的做法是把它压缩成一个 Rust 二进制。
  • 兼容 nvm 的项目约定:它识别.node-version和.nvmrc文件,迁移不用改项目配置;目录里连这两个文件都没有时,默认还会读package.json的engines.node(可用--resolve-engines=false关闭)。
  • 跨平台:macOS、Windows、Linux 都支持,bash、zsh、fish、PowerShell 均有对应的初始化方式。仓库的 benchmarks/ 目录里还附带了基于 hyperfine 的对比脚本(basic/fnm 对 basic/nvm),覆盖"安装 + 切换 + 验证"的完整流程,方便你自行验证。

从安装到第一次切换:只需 3 步

环境准备与安装

fnm 本身不需要 Node.js 环境,选一个你顺手的包管理器即可:

brew install fnm # macOS / Linux winget install Schniz.fnm # Windows cargo install fnm # 跨平台,需要 Rust 环境

这些方式装出来的都是同一个单文件二进制,几秒即可完成;README 里还给了官方安装脚本和 release 二进制两种备选。

shell 初始化

fnm 通过fnm env输出一段环境配置,需要你的 shell 执行它。把下面这行写进~/.bashrc(zsh 用户把--shell zsh并写进~/.zshrc):

eval "$(fnm env --use-on-cd --shell bash)"

这里有两个关键参数:显式传--shell可以跳过运行时的 shell 推断,更快也更稳;--use-on-cd会注册一个目录变更钩子,你每次cd进项目时自动切换对应版本,官方文档将其列为"强烈推荐",建议一开始就加上。

安装并切换第一个版本

fnm install 20 # 安装最新的 Node 20.x fnm use 20 # 当前 shell 切换到 20.x node -v # 确认生效

版本号支持部分匹配:写20会解析到已知的最新 20.x,写完整版本号或lts/iron这类 LTS 名称也可以。

fnm 常用命令速查:8 条高频操作

命令作用备注
fnm install 20安装最新 Node 20.x接受18、20.10.0、lts/NAME等形式
fnm install --lts安装最新 LTS 版本等价于直接指定 LTS
fnm use 20当前 shell 切换到 20.x未安装时加--install-if-missing
fnm use按当前目录版本文件切换读.node-version/.nvmrc
fnm ls列出本地已安装版本list的别名
fnm ls-remote --lts查询远端 LTS 版本可加--filter 20做范围过滤
fnm default 20设置默认版本不带参数运行时显示当前默认
fnm exec --using=20 npm i用指定版本跑单条命令不改变当前 shell 状态

进阶配置:3 个让你少动手的设置

monorepo 里的递归版本查找

默认情况下fnm use不带参数时只查当前目录(local策略),进子包目录就会报"找不到版本文件"。把初始化行改成:

eval "$(fnm env --use-on-cd --version-file-strategy=recursive --shell bash)"

配完后,在repo/packages/my-package里执行fnm use,会向上找到仓库根目录的.node-version并切到那个版本,子目录工作不再需要单独放版本文件。

固定默认版本与版本别名

新开 shell 没有版本文件时,走的就是默认版本;再给常用版本起个名字,输入更短:

fnm default 20 # 默认版本设为 20.x fnm alias 20 work # 之后 fnm use work 即可切换

别名用fnm unalias work删除。团队共享的版本名(如legacy、stable)起好后,新人照抄就行。

装版本时顺手启用 Corepack

fnm install --corepack-enabled --lts

加上--corepack-enabled后,每次新装 Node 版本 fnm 都会替你执行corepack enable,省去手动开启 pnpm/yarn 的一步。官方标注该功能为实验性,介意的话可以保持默认关闭。

新手常见问题

  • 新终端不认 fnm 命令,或 node 版本没变:大概率是fnm env那行没写进当前 shell 对应的配置文件(bash 看.bashrc,zsh 看.zshrc),确认写对了重新开一个终端。
  • fnm use不带参数报 "Can't find version in dotfile":默认策略只查当前目录,按上文改成--version-file-strategy=recursive即可。
  • fnm use 20提示版本不存在:该版本还没装,用fnm use 20 --install-if-missing一条命令装好再切。

相关资源

  • 完整命令参考:docs/commands.md
  • 全部配置开关说明:docs/configuration.md
  • 用--node-dist-mirror装 nightly 版本:docs/nightly.md
  • 延伸阅读:版本解析逻辑在 src/choose_version_for_user_input.rs,版本文件读取在 src/version_files.rs,各 shell 的适配实现在 src/shell/

把版本切换从"每次都要想一步"变成"cd 进去就发生",是 fnm 最核心的价值。现在只需做一件事:打开你的 shell 配置文件,把上面那一行eval写进去,重启终端,然后fnm install装一个你手头的版本试试。

【免费下载链接】fnm🚀 Fast and simple Node.js version manager, built in Rust项目地址: https://gitcode.com/gh_mirrors/fn/fnm

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询