nvm、volta、fnm都是node版本管理工具,用于管理多个node版本,方便开发。
站在简洁、省事、好用、快捷的角度上,推荐使用:
- 手动包管理:nvm
- 多项目自动切换node版本,推荐volta
nvm
- 上一代node版本管理工具,用来切换node版本
- 相对新的版本管理工具较慢:虽然nvm功能强大,但由于其依赖于源代码编译和安装,整体性能和切换速度相对较慢(实际开发感觉不到,切换就一句命令的事,当然,如果电脑太烂…可能能感觉到)。
- Node 绑死 npm版本
安装
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
使用 先说结论:日常好用,<自动切换版本>这个功能不好用,不推荐使用,半自动,不如不折腾,相比之下,每次nvm use还省点心
项目级别管理:
1、在项目根目录下,可以通过命令创建.nvmrc文件,并指定node版本号
echo "12.16.0" > .nvmrc
也可以自己手动创建一个.nvmrc的文件,内容只填写node的版本号,比如12.16.0
2、让 NVM 进入目录自动切换(关键!)
打开 PowerShell,执行下面这行命令:
notepad $profile弹出文件,把下面代码粘贴进去:
Function Set-NvmVersion {
if (Test-Path ".nvmrc") {
$version = Get-Content ".nvmrc"
nvm use $version
}
}
Register-EngineEvent PowerShell.Exiting -Action {Set-Location $HOME; nvm use default} | Out-Null
Register-EngineEvent LocationChanged -Action {Set-NvmVersion} | Out-Null3、关闭所有终端,重新打开!进入项目
cd d:\git\hexoblog会看到如下提示(大概率看不到,windows太容易报错了,百度已死,报错复制到豆包,大傻子AI会瞎出馊主意,这类问题放弃问豆包,deepsuck、元宝,一个不如一个,遇到报错可以直接放弃这种方式,问国外的AI or 直接换volta):
Now using node v12.16.0# 安装node版本
nvm install 12.16.0
# 切换node版本
nvm use 12.16.0
# 查看已安装的node版本
nvm ls
# 删除node版本
nvm uninstall 12.16.0
volta
只要是从命令行进入的项目,一进入项目路径,node版本就会自动切换,非常方便,这就是我想要的功能
- Volta 不是全局 / 会话级切换(像 nvm 那样),而是按命令所在目录(cwd)动态代理,所以同时启动两个项目,Node 版本是完全独立隔离的、互不干扰。nvm是全局替换,只能启动支持同版本node的项目
- 性能优化:Volta的设计目标之一是提高性能,它使用轻量级的二进制分发机制,下载方便、安装快。
- 快速切换:Volta旨在简化开发人员的工作流程,减少配置和维护的复杂性,由于其内部机制,版本切换非常迅速。
- 一致性:无论是在本地开发还是CI/CD环境中,Volta都能提供一致的Node.js版本管理体验。
- 跨平台支持:Volta原生支持Linux、macOS和Windows,具有较好的跨平台兼容性。
- 无须sudo权限:所有操作都不需要管理员权限,避免了潜在的安全风险。
- Yarn和npm管理:Volta 的一个重要特性是可以在同一个 Node.js 版本下自由切换 npm、yarn 和 pnpm 的版本,这对于需要在不同包管理器之间切换的项目非常有用。
安装
windows 打开powershell,输入以下命令:(要关闭防火墙,不然会安装失败 )
winget install Volta.Volta
如果提示没有winget,也可以用irm
irm https://volta.sh/install-windows | iex使用
项目级别管理,package.json 中添加volta字段
{
"volta": {
"node": "12.16.0"
}
}
# 安装node版本
volta install node@12.16.0
# 切换node版本
volta pin node@12.16.0
# 查看已安装的node版本
volta list node = nvm ls(稍微比nvm费劲一点,要加node,因为volta还能管理npm、yarn、pnpm包,要做区分)
# 删除node版本
volta uninstall node@12.16.0
注意:
如果同时安装了volta和nvm,并且设置了自动切换,就会出现冲突,因为它们都试图管理node版本。只设置一个的自动切换,就没事。
卸载
极小概率对老项目不是完全兼容,有个node12的老项目,用volta切换node版本,启动会报错,试过删除node_moudules和package-lock.json了,依旧报错。
把volta卸载了,用nvm切换node版本,就没事了,然后又重装volta,又不报错了…代码以一种奇怪的方式运行了起来.gif
卸载volta的命令
winget uninstall Volta.Voltafnm
fnm = 说是nvm升级版,
- 配置繁琐,powershell里的提示乱码,安装、配置、卸载都麻烦
- 整体体验:
- 甚至不如nvm用起来简洁,虽然操作命令差不多,但整体体验还不如nvm。大家都那么忙,最好是安装完直接生效,一个包管理+切换功能,整什么一堆花活配置这配置那的。
- fnm这个玩意儿可以说是一坨大便
windows安装/卸载
//安装
winget install Schniz.fnm
//卸载
winget install Schniz.fnm
使用
# 安装node版本
fnm install 12.16.0
# 切换node版本
fnm use 12.16.0
# 查看已安装的node版本
fnm list
# 删除node版本
fnm uninstall 12.16.0