跳到主要内容

fnm

Github: fnm

fnm 是一个很轻的 Node.js 版本管理工具,最大的优点就是快。

如果你平时常遇到这些情况:

  • 不同项目需要不同的 Node 版本
  • 本地需要在 Node 18Node 20Node 22 之间切换
  • 觉得 nvm 每次进终端都慢一点
  • 想配合终端自动切换项目里的 Node 版本

fnm 很值得试试。

为什么推荐 fnm

我自己对 fnm 的第一印象其实很简单:装好以后没什么存在感,但该切版本的时候又很好用。

它比较让人省心的地方主要有这几个:

  • 启动快,进入终端时负担更小
  • 安装和切换命令简单
  • 支持读取 .node-version.nvmrc
  • zshbashfish 都能比较顺滑地配合

如果你手上项目不少,这种差别会比想象中明显。

安装

在 macOS 上直接用 Homebrew 装最省事:

brew install fnm

安装后,把初始化脚本加到你的 shell 配置里。

zsh

编辑 ~/.zshrc

eval "$(fnm env --use-on-cd --shell zsh)"

保存后执行:

source ~/.zshrc

bash

编辑 ~/.bashrc~/.bash_profile

eval "$(fnm env --use-on-cd --shell bash)"

fish

编辑 ~/.config/fish/config.fish

fnm env --use-on-cd --shell fish | source

常用命令

安装 Node

fnm install 22
fnm install 20
fnm install --lts

查看已安装版本

fnm list

切换版本

fnm use 22
fnm use 20

设置默认版本

fnm default 22

查看当前版本

node -v
fnm current

项目里自动切换 Node 版本

这一点很好用,也是我最常用的部分。

如果你的项目根目录里有 .node-version

22

或者有 .nvmrc

20

只要你在 shell 初始化里加了 --use-on-cd,进这个目录时就会自动切到对应版本。

例如:

echo "20" > .node-version

之后进入项目目录,就会自动切到 Node 20

一个比较顺手的使用方式

我自己现在基本是这么用的:

  1. 全局安装 fnm
  2. fnm default 22 设置一个平时常用的默认版本
  3. 每个项目单独维护 .node-version
  4. 进入目录自动切换,离开目录恢复默认版本

这样项目之间不太会串版本,也比较省心。

nvm 的一个直观区别

nvm 当然也没什么问题,成熟,资料也多。

不过如果你更在意:

  • shell 启动速度
  • 更轻的配置
  • 更直接的命令体验

那我还是会更偏向 fnm