为什么我建议你用FNM替换nvm管理本地node版本

2,461 阅读2分钟

由于历史项目包袱比较多,不可避免的要在本机上有个多个项目环境。比如现在经常开发的项目至少有3种:

  1. v16.x : 主流项目,也是频繁维护的大多数项目,应该是创建在 2~3年内的

  2. v18.x: 新项目,可以使用最新的node版本,这里由于集团构建镜像还不支持 node@20,所以 v18.x 就代表最新的版本

  3. v14.x:一些老旧的项目,比较重要,不敢随意升级,只能尝试慢慢将功能迁移到新项目

nvm

由于不同项目需要的node版本不同,所以这里通过项目内配置.nvmrc 文件 ,通过 nvm use 命令切换版本。

后来由于每次需要手动 nvm use比较烦,找到个 vscode 插件 vsc-nvm ,可以 在命令行中通过 code . 打开vscode时自动执行 nvm use 命令,这样 在 vscode 的 iTerm 命令行中,就自动切换到正确的版本了,不管是 install 还是 npm start 都好用。(大功告成 (^-^)V)

nvm缺点

就这么用了很长时间,上面方案不是没有缺点:

  1. nvm 速度慢,这个是主要原因,冷启动要很长时间,热启动也需要好一会

  2. 我需要在vscode中,开个命令窗口,所有的 install 、start命令都在这里执行。但实际上我想在 item2 里执行命令,占用太多vscode视图空间,会影响我看代码的数量

然后我就找 其他的可替换工具:

  1. N:和 nvm差不多,需要手动执行 n use 切换版本号

  2. Volta 沃尔塔 : 需要在 package.json中 增加 volta配置,不能复用 .nvmrc文件。在需要 node@14的老项目中,安装依赖有点问题

  3. Asdf: 如果本机需要开发多门语言,可以用来管理不同版本

  4. FNM:自动切换,复用.nvmrc文件

最后 尝试下来 用 FNM是比较好的体验

FNM

安装

# 一键安装
$ curl -fsSL https://fnm.vercel.app/install | bash

我安装时,这个命令不通,但是浏览器可以打开。我就本地创建1个文件,把内容 粘贴进去,然后 bash 执行这个文件 就可以了

使用

# 安装指定版本node
fnm install 16
# 使用这个版本
fnm use 16

这里调用 时报错了,看了下 提示,需要去配置下 zsh github.com/Schniz/fnm#…

然后就可以愉快地 使用啦

项目之间切换

从上面可以看到,进入一个项目

  1. 如果 本地fnm已经安装了 对应版本的node,会自动切换过去

  2. 如果 本地fnm没有 安装指定的node版本,报红色错误提示 ,询问是否安装 对应的node版本

需要node@14的老项目 也可以正常安装依赖启动,用vscode直接打开项目也可以正确切换到对应的node版本

完美؏؏☝ᖗ乛◡乛ᖘ☝؏؏ 今天摸鱼结束,下班