前沿
在前端开发中,Node.js 的版本管理是每位开发者绕不开的问题。随着项目的复杂性提升,时常需要在多个Node版本之间来回切换。长期以来,nvm一直是最常见的解决方案,但在实际使用中,nvm 的一些局限性也逐渐显现出来。而近几年异军突起的fnm(Fast Node Manager),以其轻量、高速、跨平台等特性,成为越来越多开发者的新宠(当然也有其他的比如:volta、asdf等,但综合使用下来fnm更推荐)。而本文则将带你从nvm出发,走进fnm的世界,理解它们的安装过程、使用命令及其区别所在,帮助你完成这次的工具进化之旅。
一、什么是nvm和fnm ?
nvm(Node Version Manager)
- 老牌 Node.js版本管理工具(使用最为广泛),提供了可靠的 Node.js 版本管理
- 通过Bash编写,支持Unix系统(如macOS 和 Linux),也可以通过shell在Windows上使用需要衍生工具(如nvm-windos,这里是用Go编写的)
fnm(Fast Node Manager)
- 较为新,通过Rust编写,启动和切换速度极快,以速度闻名
- 原生支持 macOS、Linux和Windows(通俗易懂就是支持跨平台
- 内存占用低,支持 .node-version、.nvmrc等版本文件自动切换
二、安装方式
安装nvm
- 在macOS/Linux的终端中使用以下命令
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
或者使用wget
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
- 安装完成之后,在~/.bashrc、~/.zshrc 中添加一下内容
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
- 综上完成后,请在终端运行
source ~/.bashrc 或 source ~/.zshrc 使配置生效
// 执行以下命令查看安装是否成功
nvm --version
- Windows使用nvm-windows
安装fnm
- 所有系统(推荐使用curl安装)
curl -fsSL https://fnm.vercel.app/install | bash
- 使用 Homebrew(macOS)
brew install fnm
// 可以将初始化命令添加到 .bashrc或.zshrc中
// .bashrc
eval "$(fnm env --use-on-cd --shell bash)"
// .zshrc
eval "$(fnm env --use-on-cd --shell zsh)"
// PowerShell
fnm env --use-on-cd --shell powershell | Out-String | Invoke-Expression
// 安装完成后,若有如下报错

// 则需要执行以下命令
fnm env --use-on-cd | Out-String | Invoke-Expression
- windows 可以通过Shell安装
winget install Schniz.fnm 或 scoop install fnm 、choco install fnm
// 安装完成后需要配置环境变量(可以去网上搜一下非常多)
>执行命令时若报一下错误:

则在powershell中执行**$profile**命令查看配置文件路径,按照路径查找文件 ,若不存在则创建

创建/查询到后输入一下命令保存到文件中即可全局访问fnm
fnm env --use-on-cd | Out-String | Invoke-Expression
// 配置完环境变量后,查看是否成功
fnm --version
- windows 也可以通过官网安装:fnm官网
- 下载版本:
- 解压到对应位置(无需运行),建议放其他盘:
- 配置环境变量
- 右键点击“我的电脑”或“此电脑”,选择属性
- 点击“高级系统设置”
- 在“系统属性”窗口下,点击“环境变量”
- 在“系统变量”部分,点击“新建”
- 分别输入变量名:FNM_DIR 与 变量值:“D:\programmingtools\fnm-windows”
6.在“系统变量”部分,找到 Path 变量双击它后,点击“新建”,添加 Fnm 的安装路径:%FNM_DIR% 后,点击“确认”并且保存更改
- 验证:以管理员的身份打开终端 PoweShell
fnm --version
显示版本号,则安装成功
- Fnm 配置
- 在终端(PowerShell)中输入以下命令
fnm env
$env:FNM_VERSION_FILE_STRATEGY = "local" (定义如何处理版本文件)
$env:FNM_DIR = "D:\programmingtools\fnm-windows"(指定 Fnm 的安装目录)
$env:FNM_LOGLEVEL = "info" (设置Fnm的日志级别,默认值 info,可选queit、error、info)
$env:FNM_COREPACK_ENABLED = "false"(启用或禁用Corepack)
$env:FNM_RESOLVE_ENGINES = "true"(确定是否解析引擎版本)
注意:有些变量不能通过设置系统环境变量修改
5.1 设置 Node 镜像地址
新增系统变量“FNM_NODE_DIST_MIRROR:npmmirror.com/mirrors/nod… 如图所示
重新打开 PowerShell 运行“fnm env”命令
5.2 配置 PowerShell
以管理员方式打开终端PowerShell,目标是配置Microsoft.PowerShell_profile.ps1配置文件。
- 创建配置文件,在PowerShell中运行以下命令
if (-not (Test-Path $profile)) { New-Item $profile -Force }
- 编辑配置文件,在 PowerShell 中运行以下命令
Invoke-Item $profile
- 将以下命令添加至配置文件末尾并保存
fnm env --use-on-cd --shell powershell | Out-String | Invoke-Expression
5.3 常见问题
- 打开终端PowerShell,出现以下报错
- 解决办法:
- 以管理员权限打开PowerShell,输入以下命令:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
输入 Y 确定安全策略
- 执行fnm use 命令报错
解决办法:重新按照5.2小节配置
三、使用方法对比
| 操作 | nvm命令 | fnm命令 |
|---|---|---|
| 查看已安装版本 | nvm ls | fnm list |
| 查看远程版本 | nvm ls-remote | fnm list-remote |
| 安装指定版本 | nvm install <版本号> | fnm install <版本号> |
| 切换版本 | nvm use <版本号> | fnm use <版本号> |
| 设置默认版本 | nvm alias default <版本号> | fnm default <版本号> |
| 卸载版本 | nvm uninstall <版本号> | fnm uninstall <版本号> |
| 自动切换 .nvmrc | 需手动执行 nvm use (也可以配置相关文件内容) | 自动检测并切换 |
四、功能差异与优势分析
| 条件 | nvm | fnm |
|---|---|---|
| 编写语言 | Bash(Shell) | Rust |
| 启动速度 | 慢(依赖shell解析) | 快(原生编译) |
| 跨平台支持 | macOS/Linux(原生)、window(通过第三方工具如:nvm-windows) | macOS/Linux/windows(原生) |
| 内存占用 | 中等 | 低 |
| 自动切换.nvmrc 支持 | 手动使用配置 | 自动切换 |
| 安装Node | 是 | 是 |
| 安装npm | 随node一起 | 随node一起 |
| 插件支持 | 用户群体多,社区资源充足,插件较少 | 官方和社区非常活跃 |
五、为什么推荐使用 fnm ?
- 极速性能:启动与切换版本几乎瞬时完成,对于频繁构建与切换项目的开发者及其友好
- 更好的跨平台支持:无需为 Windows 安装额外版本管理工具,一套搞定
- 自动切换版本:识别 .nvmrc、.node-version 等文件,自动切换版本
- 简洁配置:安装后只需 eval "$(fnm env)" 便无需其他配置
六、最后
随着Node.js的生态环境不断演进,推动着周边工具的更新迭代。虽然 nvm 功能成熟,使用比较久,但现在开发需求下,它的速度和平台支持已经逐渐落后。而fnm的新起,正好满足这一方面的需求,使得开发者的效率显著提高。如你还在使用 nvm的话,不妨尝试一下 fnm叭,也许会彻底改变你的开发流程。让我们一起向着更快、更优雅的工具迈进吧~