放弃nvm改换fnm
今天用Claude调试以前的前端项目时,我需要使用nodejs14,按照往常的习惯直接使用nvm install 14,并且切换过去即可。但这次出问题了,我是用nvm use 14,虽然显示切换成功了,但使用node -v依旧显示的时nodejs 24的版本。后续折腾一番环境变量,终于可以切换了,但安装nodejs 14的时候又出幺蛾子了(实测nodejs 18就没问题),npm死活装不上,虽然可以通过手动下载等方式将其配置好,但也略嫌麻烦,于是就萌生了更换工具的想法。
对于Nodejs的版本管理工具,还有另外一个使用Rust实现的fnm。具体请查看Schniz/fnm: 🚀 Fast and simple Node.js version manager, built in Rust。我目前使用scoop来管理这些开发软件,所以安装也是极其方便。(别忘了先卸载nvm)
1 | scoop install fnm |
安装完成后,其命令几乎和nvm一样一样的。
1 | # 安装node |
和nvm替换全局不同,fnm仅仅对当前session有效。
所以,安装完成后,一般会有一段提示,让你再powershell的$PROFILE末尾配置如下:
1 | # 配置 fnm 环境变量 |
这个命令的作用就是进入目录后,如果当前目录存在.node-version(或者.nvmrc),并且里面是版本号时,就会自动切换到这个node版本,简直是健忘症的福音啊。所以我在每个前端的项目中,都创建了这个文件,并且指定版本:
1 | # 在前端项目的根目录,请千万注意,不要把文件名搞成.node_version,我因为这个问题和AI讨论了一下午,AI都开始怀疑是PWS的问题了。 |
这样,打开不同的前端项目就会自动的切换到指定版本。

它的检测顺序是:
.node-version文件.nvmrc文件package.json中的engines.node字段(需启用--resolve-engines)
当然,也可以零时使用某个版本来执行命令,并且不会影响已经使用其他版本运行的项目。
1 | fnm exec --using=14 node index.js |
这是 fnm 和 nvm-windows 最大的技术区别:
- nvm:通过修改系统的全局
Path和创建硬链接来工作,容易被其他软件抢占优先级。 - fnm:当你执行
fnm use时,它只在当前的 PowerShell 会话(窗口)里临时修改Path。 - 意义:这意味着你可以在窗口 A 开着 Node 14 跑老代码,窗口 B 开着 Node 24 跑新代码,互不干扰。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 码农笔记!
评论
WalineDisqus








