Apple Silicon Mac用fnm管理Node.js多版本(含镜像加速)

nvm 每次打开终端都要加载大量 Shell 脚本,启动慢;fnm(Fast Node Manager)用 Rust 编写,几乎零延迟,原生支持 Apple Silicon,并通过 --use-on-cd 在进入项目目录时自动切换 .nvmrc 指定的版本。

一、安装 fnm

前提:Homebrew 已装好。

brew install fnm

验证:

fnm --version

二、配置 zsh 集成

编辑 ~/.zshrc,加入:

# fnm 用 npmmirror Node 镜像(国内加速)
export FNM_NODE_DIST_MIRROR="https://npmmirror.com/mirrors/node"
eval "$(fnm env --use-on-cd --shell zsh)"
  • --use-on-cd:进入目录时自动读取 .node-version 或 .nvmrc 并切换版本
  • FNM_NODE_DIST_MIRROR:让 Node 二进制走国内 npmmirror 镜像

生效:

source ~/.zshrc

三、安装 Node.js

fnm install --lts      # 最新 LTS
fnm install 24         # 指定大版本(自动选最新小版本)
fnm install 22.12.0    # 精确版本

fnm default 24         # 设置默认版本

四、验证(重点查架构)

which node
node --version
node -p "process.arch"
# 预期输出:arm64

输出 arm64 说明 Node 是 Apple Silicon 原生版本,不是经 Rosetta 2 运行的 x64 版本。

五、项目级自动切换

项目根目录创建 .nvmrc:

cd your-project
echo "24" > .nvmrc

配了 --use-on-cd 后,cd 进目录会自动切到 Node 24。fnm 兼容 .nvmrc 和 .node-version 两种文件,方便团队里有 nvm 用户的场景。

六、常用命令

fnm list            # 查看已安装版本
fnm list-remote     # 查看可安装的远程版本
fnm install --lts   # 安装最新 LTS
fnm install 22      # 安装指定大版本
fnm use 22          # 临时切换(当前 shell)
fnm default 22      # 设置默认版本
fnm current         # 查看当前版本
fnm alias 22 default # 将版本设为别名
fnm exec --using=22 node -v  # 用指定版本执行命令
fnm uninstall 18    # 卸载某个版本
fnm env             # 输出 shell 环境变量脚本

七、踩坑与排错

  • fnm: command not found:which fnm 无输出则 brew unlink fnm && brew link fnm。

  • PATH 顺序:若同时装了 pyenv,fnm 段和 pyenv 段都需在 brew shellenv 之后,pyenv shims 需显式置顶。

  • npm 全局安装权限错误:报 EACCES 时不要用 sudo npm install -g:

    mkdir ~/.npm-global
    npm config set prefix ~/.npm-global
    echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.zshrc
    source ~/.zshrc
  • 需要 x64 版本:fnm install 20 --arch=x64,fnm 会自动经 Rosetta 2 运行。

八、npm 国内镜像

npm config set registry https://registry.npmmirror.com
npm config get registry   # 验证

未经允许不得转载:编源视界 » Apple Silicon Mac用fnm管理Node.js多版本(含镜像加速)