Skip to content

fnm vs nvm

fnm 和 nvm 都是最流行的 Node.js 版本管理器。本指南将详细对比两者,帮助你做出选择。

快速对比

特性fnmnvm
编写语言RustBash
启动速度⚡ 极快🐢 较慢
Windows 支持✅ 原生支持❌ 需要 nvm-windows
跨平台✅ 统一体验⚠️ 不同实现
版本文件✅ 多种格式✅ .nvmrc
自动切换✅ 内置⚠️ 需要钩子
并行下载✅ 支持❌ 不支持
内存占用💚 极低🟡 中等
安装方式单文件脚本安装

详细对比

性能

fnm

bash
# 启动时间:约 5-10ms
time fnm --version
# fnm 1.37.1
# real    0m0.008s

nvm

bash
# 启动时间:约 100-500ms(取决于 Shell)
time nvm --version
# 0.39.0
# real    0m0.150s

结论:fnm 启动速度比 nvm 快 10-50 倍,对 Shell 启动时间影响更小。

跨平台支持

fnm

  • ✅ macOS(Intel & Apple Silicon)
  • ✅ Windows(原生支持)
  • ✅ Linux(x64 & ARM64)
  • ✅ FreeBSD

统一的命令和体验,无需学习不同工具。

nvm

  • ✅ macOS / Linux
  • ❌ Windows 需要 nvm-windows(独立项目)
  • ⚠️ 命令略有差异

结论:fnm 提供更好的跨平台一致性。

版本文件支持

fnm

bash
# 支持多种格式
.node-version    # 推荐格式
.nvmrc           # 兼容 nvm
package.json     # engines.node 字段

nvm

bash
# 只支持一种格式
.nvmrc

结论:fnm 支持更多格式,迁移更方便。

自动版本切换

fnm

bash
# 一行配置即可启用
eval "$(fnm env --use-on-cd)"

进入包含版本文件的目录时自动切换。

nvm

bash
# 需要配置 shell 钩子
# 在 ~/.bashrc 或 ~/.zshrc 中添加
autoload -U add-zsh-hook
load-nvmrc() {
  # ... 复杂的脚本
}
add-zsh-hook chpwd load-nvmrc

结论:fnm 配置更简单,开箱即用。

命令对比

操作fnmnvm
安装版本fnm install 20nvm install 20
切换版本fnm use 20nvm use 20
列出已安装fnm listnvm ls
列出远程fnm list-remotenvm ls-remote
设置默认fnm default 20nvm alias default 20
当前版本fnm currentnvm current
卸载版本fnm uninstall 20nvm uninstall 20

结论:命令类似,迁移成本低。

安装方式

fnm

bash
# macOS/Linux
curl -fsSL https://fnm.vercel.app/install | bash

# Windows
winget install Schniz.fnm

# Homebrew
brew install fnm

单文件安装,无需复杂配置。

nvm

bash
# macOS/Linux
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

# Windows
# 需要单独安装 nvm-windows

需要修改 Shell 配置文件。

功能特性

fnm 独有特性

  • 🚀 并行下载,安装更快
  • 📦 单文件,无依赖
  • 🔄 版本文件递归查找
  • 🎯 engines.node 支持
  • 📊 更好的错误信息

nvm 独有特性

  • 📚 更成熟的生态系统
  • 🏷️ 更多的 LTS 版本别名
  • 🔧 更细粒度的配置选项

迁移指南

从 nvm 迁移到 fnm

1. 安装 fnm

bash
curl -fsSL https://fnm.vercel.app/install | bash

2. 更新 Shell 配置

bash
# 移除 nvm 配置
# 添加 fnm 配置
eval "$(fnm env --use-on-cd)"

3. 版本文件兼容

.nvmrc 文件无需修改,fnm 完全兼容。

4. 重新安装 Node.js

bash
fnm install --lts
fnm install 18

选择建议

选择 fnm 如果你:

  • 使用 Windows 系统
  • 追求极致性能
  • 需要跨平台一致性
  • 希望配置简单
  • 使用 Apple Silicon Mac

选择 nvm 如果你:

  • 已有成熟的 nvm 工作流
  • 需要特定的 nvm 功能
  • 项目依赖 nvm 特定行为

总结

fnm 是一个现代化的 Node.js 版本管理器,相比 nvm 有以下优势:

  1. 更快 - Rust 编写,启动和执行速度极快
  2. 更简单 - 单文件安装,配置简单
  3. 更统一 - 跨平台一致的体验
  4. 更智能 - 自动版本切换,多格式支持

对于新项目或追求效率的开发者,fnm 是更好的选择。

相关链接