从 nvm 到 fnm:更快、更省心的 Node.js 版本管理器迁移指南
从 nvm 到 fnm更快、更省心的 Node.js 版本管理器迁移指南如果你受够了每次开终端都要等上好几秒、nvm use在新 shell 里失忆、Windows 上还得装nvm-windows这个另起炉灶的分支——那么fnmFast Node Manager值得你花十分钟迁移过来。一、为什么需要 Node.js 版本管理器前端生态迭代极快一个老项目可能锁死在 Node 16新项目却要用 Node 22 的原生 ESM 与测试运行器。手动装/卸 Node 版本既痛苦又容易污染全局。版本管理器的价值在于一键切换nvm use 18/fnm use 18秒切版本目录自动切换进入项目目录自动读取.nvmrc/.node-version无需手动隔离全局依赖每个 Node 版本有独立的全局node_modules互不干扰二、nvm经典但显老nvmNode Version Manager是社区最老牌的方案GitHub 仓库nvm-sh/nvm累计~81k stars。优点生态最成熟几乎所有教程都默认你用 nvm纯 Bash/Zsh 脚本实现零额外依赖痛点慢每次启动 shell 都要source nvm.sh这段脚本会同步加载所有版本元数据冷启动开销大普遍几百毫秒到数秒Windows 不官方支持必须改用第三方分支coreybutler/nvm-windows命令和实现都和 macOS/Linux 版不一样自动切换靠手搓 hook需要自己在.bashrc里写cd钩子才能根据.nvmrc自动切版本单线程 shell 脚本下载、解压、读元数据都没有并行优化三、fnm用 Rust 重写的现代替代品fnmFast Node Manager由 Gal Schlezinger 开源仓库地址Schniz/fnm目前26.4k stars用Rust编写单一二进制文件。核心优势特性nvmfnm实现语言Bash/Zsh 脚本Rust 编译二进制安装包体积脚本KB 级单二进制~5MBShell 启动开销较大source 脚本极小仅注入一个 shell 函数版本切换速度慢同步解析快并行下载 缓存Windows 原生支持❌ 需 nvm-windows 分支✅ 原生支持.nvmrc自动切换需手写 cd 钩子✅ 内置--use-on-cd.node-version支持❌✅多架构arm64 等支持支持简单说fnm 把 nvm 做的事用 Rust 重新做了一遍而且做得更快、更跨平台、开箱即用。四、安装 fnmmacOS / Linux推荐 Homebrew 或脚本# 方式一HomebrewmacOS / Linuxbrewbrewinstallfnm# 方式二官方安装脚本curlcurl-fsSLhttps://fnm.vercel.app/install|bashWindows# 方式一Scoopscoop install fnm# 方式二Wingetwinget install Schniz.fnm# 方式三Chocolateychoco install fnm配置 Shell 集成关键一步安装后必须把 fnm 的 shell 钩子加到你的启动脚本里并开启自动切换Bash~/.bashrceval$(fnmenv--use-on-cd--shellbash)Zsh~/.zshrceval $(fnm env --use-on-cd --shell zsh)PowerShell$PROFILEfnm env--use-on-cd--shell powershell|Out-String|Invoke-ExpressionFish~/.config/fish/config.fishfnm env --use-on-cd --shell fish | source--use-on-cd是 fnm 的杀手锏进入任何含.nvmrc或.node-version的目录时自动切换到对应 Node 版本离开时自动切回默认版本。nvm 需要你手写钩子才能实现。配置完成后重启终端验证安装fnm--version五、命令对照表nvm → fnm 迁移速查这是迁移过程中最常查的部分建议收藏操作nvm 命令fnm 命令安装指定版本nvm install 18fnm install 18安装最新 LTSnvm install --ltsfnm install --lts使用某版本当前 shellnvm use 18fnm use 18设默认版本nvm alias default 18fnm default 18列出已装版本nvm lsfnm list列出远程可装版本nvm ls-remotefnm list-remote卸载某版本nvm uninstall 18fnm uninstall 18查看当前版本nvm currentfnm current执行指定版本的命令nvm exec 18 node app.jsfnm exec --using18 node app.js跑一次性命令nvm run 18 --versionfnm run --using18 --version可以看到命令几乎是一一对应的记忆成本极低。六、完整迁移流程nvm → fnmStep 1记录当前 nvm 管理的版本迁移前先摸清家底避免遗漏nvmls记下你实际在用的版本比如 16.20.2、18.20.4、20.18.0以及默认版本。Step 2安装 fnm按上一节的步骤安装并配置好 shell 集成确认fnm --version正常输出。Step 3用 fnm 重新安装所需版本# 安装你记录下来的版本支持模糊匹配自动装该大版本最新fnminstall16fnminstall18fnminstall20# 安装最新 LTS 版本fnminstall--lts# 设置默认版本相当于 nvm alias defaultfnm default20fnm 的版本号支持模糊匹配fnm install 18会自动装 18.x 的最新版--lts则安装当前最新的 LTS 版本。Step 4迁移.nvmrc习惯好消息fnm 完全兼容.nvmrc你项目里现有的.nvmrc文件无需任何修改。只要开启了--use-on-cdcd进项目目录就会自动fnm use对应版本。你也可以手动触发fnm use# 读取当前目录的 .nvmrc / .node-versionfnminstall# 读取 .nvmrc 并安装对应版本首次进入新项目时很方便Step 5确认全局 npm 包注意fnm 和 nvm 的版本目录结构不同全局包不会自动继承。迁移后需要在每个版本下重装你依赖的全局工具如pnpm、yarn、tsx、nodemon等fnm use20npminstall-gpnpmyarntsx如果你全局包很多建议先在 nvm 下导出清单nvm use20npmls-g--depth0global-packages.txt再用脚本批量重装。Step 6卸载 nvm可选确认 fnm 一切正常后可以清理 nvm1. 从 shell 启动脚本中移除 nvm 配置编辑~/.bashrc/~/.zshrc删除或注释掉以下类似行# export NVM_DIR$HOME/.nvm# [ -s $NVM_DIR/nvm.sh ] \. $NVM_DIR/nvm.sh# [ -s $NVM_DIR/bash_completion ] \. $NVM_DIR/bash_completion2. 删除 nvm 目录rm-rf$NVM_DIR# 通常是rm-rf~/.nvmWindowsnvm-windows通过添加或删除程序卸载再删除%NVM_HOME%与%NVM_SYMLINK%指向的目录并清理环境变量NVM_HOME、NVM_SYMLINK。Step 7验证迁移成功# 确认 fnm 生效、node 来源正确whichnode# 应指向 fnm 管理的路径如 ~/.fnm/...node-vfnm current fnm list# 测试自动切换进入一个有 .nvmrc 的项目cdyour-project/ fnm current# 应自动切到 .nvmrc 指定的版本七、迁移决策建议是WindowsmacOS / Linux是否是否你需要 Node 版本管理器吗主要平台✅ 强烈推荐 fnm原生支持告别 nvm-windows痛点是 shell 启动慢或自动切换失灵✅ 推荐迁移 fnm团队/教程都强绑 nvm⚠ 可暂留 nvm但 fnm 完全兼容 .nvmrc 开始迁移一句话总结如果你在 Windows 上或受够了 shell 启动慢 / 自动切换难用迁移到 fnm 收益巨大且.nvmrc零成本兼容。如果你深度依赖 nvm 的某些边缘特性、或团队强制统一fnm 也能和平共处两者可并存只要 shell 启动脚本里只eval一个。八、常见坑与 FAQQ1迁移后node命令找不到了A99% 是 shell 集成没配好。确认启动脚本里有eval $(fnm env --use-on-cd)并重启终端。用which node检查路径是否在~/.fnm下。Q2fnm 和 nvm 能同时装吗A能装但同一个 shell 会话里只应激活一个。如果node路径混乱检查启动脚本里是否同时source了 nvm 和eval了 fnm注释掉其一即可。Q3--use-on-cd没生效A确认配置时带了--use-on-cd参数不是只写fnm env。另外离开目录时 fnm 默认切回fnm default设的版本记得先fnm default 20设一个默认值。Q4CI 环境怎么用 fnmAGitHub Actions 官方有Schniz/fnmaction或用fnm install fnm use两行搞定比 nvm 快很多。Q5fnm 安装包从哪下载会不会很慢Afnm 从 Node 官方源下载 Node 二进制。国内可通过设置镜像加速exportNODE_DIST_URLhttps://npmmirror.com/mirrors/node fnminstall20九、参考链接fnm 官方仓库https://github.com/Schniz/fnmfnm 官方文档https://fnm.vercel.appnvm 官方仓库https://github.com/nvm-sh/nvmnvm-windowshttps://github.com/coreybutler/nvm-windows写在最后版本管理器是开发体验里基础设施级的工具换一个更快的每天能省下的等待时间是复利。fnm 用 Rust 把这件事做到了近乎完美——跨平台、快、兼容.nvmrc迁移成本远小于你想象。如果你还在用 nvm不妨今晚就试试。