一、前言
为什么需要为每个项目单独指定一个 Node.js 版本?
这是你这么做之前首先要明确的问题。
也许你遇到过以下情况:
- 我想要尝鲜
Node.js v23.x
所带来的新特性 - 我要给 ArcoDesign 贡献一波,但运行它要求 Node.js 版本为
v18.x
- 团队成员 Node.js 版本不统一: 守旧派用 v12.x、保守派用 v14.x、激进派用 v18.x,突然某天老板让我去维护守旧派负责的项目,运行后由于Node.js版本不一致直接报错
- 我需要同时运行两个项目,但项目需要的 Node.js 版本不同
- 我是项目的主要维护者,我希望为项目强制限制node和npm版本,防止lock文件冲突
…
这个时候就轮到版本管理工具大展拳脚了!
二、都有哪些成熟的 Node.js 版本管理工具?
我们可以从 Node.js 官网看到官方推荐的版本管理工具:
Node.js — Installing Node.js via package manager (nodejs.org)
其中,最流行的是 nvm、n、fnm。(由于 n 和 nvm 功能和指令相似,但不支持windows,所以这次不对其做评测)
此外从下面这篇 论坛贴中大家还提到了一些其他的版本管理工具/方案:
http://bbs.itying.com/topic/676bff455b798701ddf6faa1
包括:volta、asdf、webstorm
下面我们来详细对比一下
2.1、 nvm
nvm 已经是大家熟知的版本管理工具了
下载nvm安装程序
值得一提的是,nvm 的 Linux/Mac 版本和 Windows 版本是两个功能相似的由不同开发者并行开发的独立工具。
Windows下载地址:https://github.com/coreybutler/nvm-windows/releases
Linux/Mac的下载地址:https://github.com/nvm-sh/nvm
打开页面后往下找到安装包,windows建议使用exe安装
下载后一直点击下一步
安装完成,使用exe会自动设置环境变量
在新打开的cmd中输入nvm version
,见到版本号代表安装成功
nvm的命令
使用nvm安装多个版本的node
#安装node14,提示下载完成后,继续安装其他版
nvm install 14
#安装node16
nvm install 16
切换本地node版本
#表示使用node16.16.0版本,注意:版本号一定要完整填写,不可以像安装时简写为16
nvm use 16.16.0
#命令查看当前安装有的node版本
nvm ls
常用的命令有:
命令 |
---|
nvm ls :查看安装的 Node 版本。 |
nvm install ${version} :安装具体的 Node 版本。 |
nvm use ${version} :使用具体的 Node 版本。 |
nvm help :查看更多命令帮助。 |
nvm缺点
当项目繁多复杂时,问题也随之而来,使用 nvm 虽然完成了多版本管理,但是默认版本只能有一个,所以很多时候,在用 vscode 打开不同项目的时候,还需要用
nvm use
来切换不同的版本使用。显然经常这样操作很麻烦,也容易忘记什么项目用什么版本,而且还有一个致命问题——无法同时运行两个不同版本的项目。
此前我也一直苦于习惯了 nvm 的顺滑操作,却没办法在切换项目时自动切换版本且同时运行的问题
2.2、 nvm-desktop
nvm-desktop 这个项目目前 star 还不多,但提供了跨平台的 nvm 图形管理界面,使用 electron 开发,且底层使用 rust 编写的命令行工具 nvmd-command 提供了智能识别项目 node 版本,自动切换和同时运行多个版本的能力。
访问地址:https://github.com/1111mp/nvm-desktop
根据 nvm-desktop 开发者解释以及我的深度体验,其可以为项目单独指定你想要的 Nodejs 的版本。
或者你也可以通过命令行为你的项目指定nodejs版本
nvmd use node_version --project。
这样做会在项目的根目录下会添加一个文件:.nvmdrc
,内容为你选择的 Node 的版本号,如果未添加此文件则加载为全局设置的 Node 的版本号。
且如果团队成员都安装了 nvm-desktop 则他们也可以在进入项目时无缝切换到指定版本。
2.3、fnm
fnm是一款快速简单的 Node.js 版本管理器,使用 Rust 构建。其 Github 地址:
Schniz/fnm: Fast and simple Node.js version manager, built in Rust (github.com)
由于 fnm 使用 Rust 构建,运行速度很快,不会和 nvm 一样在查询版本列表时卡住几秒。
fnm 功能:
- 设置全局默认版本
- 为版本设置别名,以便随意调用
- 为当前 shell 窗口临时切换 node 版本
- 使用 .node-version 文件为项目配置默认版本以自动切换
对于 fnm 的安装教程可以查看这篇:
Windows 上使用 fnm 安裝 Node.js - Oldest Dream
可惜的是 fnm 没有详细的文档,虽然指令并不多。
2.4、volta
volta 也使用 Rust 构建。Github 地址:
volta-cli/volta: Volta: JS Toolchains as Code. (github.com)
不同于 nvm 和 fnm 的软链替换原理, volta 会代理 node、npm 等命令,是更广义上的 toolchain manager。
除了 Node 其还能管理 npm、yarn 等,目的就是为了做到不同的项目里能有完整且版本隔离的 toolchain。
volta 功能:
- 设置全局默认版本
- 为全局包固定 node 版本
- 使用 p
ackage.json
文件为项目配置默认 node 版本和 npm 版本以自动切换
为项目固定版本时 volta 会在 package.json 中添加以下内容:
"volta": {
"node": "12.20.2",
"yarn": "1.19.2"
}
值得一提的是 volta 官网有非常详尽的文档
不过也需要注意,volta 的实现方式决定了其对 node 环境隔离方面可能有所欠缺。
2.5、asdf
asdf 是一个强大的工具,目的是确保团队的任何工具都可以使用完全相同的版本, 核心在 Shell 配置中设置好之后,通过插件系统来支持各种工具的版本管理。它就像 gvm 、 nvm 、 rbenv 和 pyenv (以及更多)合而为一。
关于项目中所有的工具版本定义都会包含在一个文件 .tool-versions 中,以支持自动切换。
可惜的是,它不能直接支持 windows。
2.6、webstorm
作为一款合格的 IDE ,而不是 vscode 这样的轻量化编辑器, webstorm 继承了 jetbrains 家的传统,用过** IDEA** 或者 pycharm 的朋友应该知道,其可以为每个项目单独指定运行环境,方便的下载和管理各种环境版本,还能对项目智能重构,功能非常强大。
但它也有缺点,在配置较低的电脑上,敲写代码有粘滞感,占用内存较大,对小项目并不友好,其又是付费产品,不如 ts 编写且开源的 vscode 得天独厚的丰富插件生态等,这就导致大量前端程序员更喜欢使用 vscode。
还是很推荐你使用webstorm 的,因为它在大型工程中表现相当出色。
3、该选择哪个做为nodejs版本管理?
选择最合适的 Node.js 版本管理工具应结合你的开发需求、团队协作情况以及个人偏好。比如:
如果你在团队环境中工作,需要一个稳定、跨平台且有友好图形界面的工具,那么我大力推荐 nvm-desktop。尽管其社区不如 nvm 那么活跃,但它提供了更现代的用户体验,安装使用都极其方便,并支持自动切换和多版本同时运行。
对于那些寻求极快性能以及简洁命令行体验的开发者,fnm 可能是最好的选择。基于 Rust 构建意味着其性能卓越,对于那些使用 nvm 时感到沮丧的开发者来说是一次新的尝试。
如果你不仅需要管理 Node.js 版本,还需要管理 npm、yarn 等 Javascript 工具链,volta 也许是最合适的选择。Volta 的理念是提供更广义的工具链管理,确保项目的环境一致性。
如果你的团队项目语言复杂,需要一个通用的版本管理工具,旨在管理多种语言的版本,例如Ruby、Python、Elixir等,asdf将是你的好帮手,它还有好用的 vscode 插件。然而需要注意的是,它并不直接支持 Windows,可能需要额外的配置。
如果你要求 IDE 强大、全面,不介意付费且对资源占用量不敏感,可以选择 WebStorm。它支持项目环境的智能管理和复杂重构等高级功能,并有着优良的用户体验。
平台推荐使用
nvm-desktop
PS:需要注意是需要卸载之前安装的nodejs和nvm等工具和环境变量
最后编辑:hugh 更新时间:2025-04-09 12:08