fnm
Github: fnm
fnm 是一个很轻的 Node.js 版本管理工具,最大的优点就是快。
如果你平时常遇到这些情况:
- 不同项目需要不同的 Node 版本
- 本地需要在
Node 18、Node 20、Node 22之间切换 - 觉得
nvm每次进终端都慢一点 - 想配合终端自动切换项目里的 Node 版本
那 fnm 很值得试试。
为什么推荐 fnm
我自己对 fnm 的第一印象其实很简单:装好以后没什么存在感,但该切版本的时候又很好用。
它比较让人省心的地方主要有这几个:
- 启动快,进入终端时负担更小
- 安装和切换命令简单
- 支持读取
.node-version或.nvmrc - 和
zsh、bash、fish都能比较顺滑地配合
如果你手上项目不少,这种差别会比想象中明显。
安装
在 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。
一个比较顺手的使用方式
我自己现在基本是这么用的:
- 全局安装
fnm - 用
fnm default 22设置一个平时常用的默认版本 - 每个项目单独维护
.node-version - 进入目录自动切换,离开目录恢复默认版本
这样项目之间不太会串版本,也比较省心。
和 nvm 的一个直观区别
nvm 当然也没什么问题,成熟,资料也多。
不过如果你更在意:
- shell 启动速度
- 更轻的配置
- 更直接的命令体验
那我还是会更偏向 fnm。