在macOS上使用fnm管理多版本Node.js环境

2026-03-31 34 阅读 前端开发

一、前言

fnm(Fast Node Manager)是一个基于 Rust 编写的 Node.js 版本管理工具,相比传统的 nvm,它具有更快的安装速度和更低的内存占用。fnm 支持 Windows、macOS 和 Linux,能够帮助开发者快速切换不同版本的 Node.js 环境。

1、本文主要内容

  • 安装 fnm(使用 Homebrew 或脚本安装)
  • 环境变量配置(zsh)
  • 使用 fnm 安装和管理 Node.js
  • 切换 Node.js 版本
  • 常用命令说明
  • 自动切换 Node.js 版本
  • 卸载 fnm

2、本文环境信息

工具/环境 版本说明
macOS macOS 11+
Shell zsh
fnm 1.39.0

二、fnm 安装(macOS)

1. 方法一:使用 Homebrew(推荐)

打开终端,运行:

brew install fnm

2. 方法二:使用安装脚本

如果不想使用 Homebrew,可以使用官方安装脚本:

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

📌 安装脚本会自动将 fnm 添加到你的 shell 配置文件中

三、环境变量配置

1. 初始化 fnm

将以下配置添加到终端配置文件中,实现自动切换 Node.js 版本和设置镜像源(永久生效)。

💡 如果你没有使用zsh,使用的是 bash,则编辑 ~/.bashrc~/.bash_profile

  1. 打开 ~/.zshrc 文件:
vi ~/.zshrc
  1. 添加以下内容:
# 设置 fnm 安装目录
export FNM_DIR="$HOME/sdk/node"

# 设置 Node.js 下载镜像为国内镜像(npmmirror.com)
export FNM_NODE_DIST_MIRROR="https://npmmirror.com/mirrors/node"

# 初始化 fnm(自动切换版本)
eval "$(fnm env --use-on-cd)"
  1. 使配置生效:
source ~/.zshrc

2. 验证配置

重新打开终端,运行以下命令验证:

fnm --version
fnm env

预期输出显示 FNM_NODE_DIST_MIRROR 已正确设置为镜像地址。

四、安装 Node.js

1. 安装指定版本

fnm install 22

2. 安装 LTS 版本

fnm install --lts

3. 查看已安装版本

fnm list

预期输出:

* v22.22.1
* v24.14.0 default, lts-latest
……

📌 * 表示当前使用的版本

4. 切换 Node.js 版本

fnm use 22

5. 设置默认版本

fnm default 22

五、常用命令

1. 查看帮助

fnm --help

2. 检查当前环境

fnm env

3. 卸载指定版本

fnm uninstall 18

4. 清除缓存

fnm cache clear

5. 验证 Node.js 和 npm

node --version
npm --version

预期输出:

v22.22.2
10.9.7

六、自动切换 Node.js 版本

在实际项目中,通常会在项目根目录创建 .nvmrc 文件来指定所需的 Node.js 版本。配合 fnm env --use-on-cd 配置,fnm 可以自动切换到正确的版本。

1. 创建 .nvmrc 文件

在项目根目录创建 .nvmrc 文件,内容为所需的 Node.js 版本号:

20

2. 终端自动切换原理

当使用 fnm env --use-on-cd 配置后,每次进入包含 .nvmrc 文件的目录时,fnm 会自动切换到文件指定的版本。

📌 这需要在终端配置文件(如 ~/.zshrc~/.bashrc)中正确配置 fnm env --use-on-cd 命令

七、卸载 fnm

1. 卸载 fnm 程序

如果使用 Homebrew 安装:

brew uninstall fnm

如果使用安装脚本安装,删除 fnm 安装目录即可:

rm -rf ~/.fnm

2. 清理残留文件

fnm 默认将 Node.js 安装在以下位置:

~/.fnm/node-versions

⚠️ 卸载前请确认不再需要这些 Node.js 版本

3. 清理环境变量

从 shell 配置文件中移除 fnm 相关的环境变量设置:

  • ~/.zshrc~/.bashrc 中的 FNM_DIRFNM_NODE_DIST_MIRROR
  • eval "$(fnm env --use-on-cd)" 命令