nvm alias default <version> 失败,如下图:
这是因为 nvm alias default <version> 实际上是通过设置软链接或环境变量告诉 nvm,当打开新的终端(或 shell)时,应该自动切换到这个版本。但它能“生效”的前提是——这个版本已经在本地被安装并被正确初始化过(即执行过 nvm use <version>,nvm 才知道怎么配置路径、node_modules 等等)。
详细解释如下:
问题现象回顾
执行了:
nvm alias default v16.15.0
然后打开一个新终端,运行:
node -v
却发现不是 v18.20.8,还是原来的版本。
解决方法
nvm use v16.15.0
nvm alias default v16.15.0
然后之后新终端才会自动使用 v16.15.0。
🔍 背后的原理
nvm use <version> 会做什么:
- 检查是否已经安装了这个版本
- 如果没有,会报错:N/A: version "v16.15.0" is not yet installed
- 如果已安装,它会临时更换环境变量:
- 把当前 Shell 的 PATH 设置为 v16.15.0 的路径,让 node 和 npm 指向正确的版本目录。
- 所以再执行 node -v 时,就变成了:v16.15.0。
⚠️注意:这只对当前的命令行窗口(终端)有效!关闭或重开,就又会失效。
nvm alias default <version> 会做什么:
其会创建一个叫 default 的别名,指向指定的 Node.js 版本。这个别名被存下来,nvm 在打开新的 shell 时会读取它,自动“切换”到那个版本(等价于执行一次 nvm use default)。
举例
nvm alias default v16.15.0
会在 nvm 配置目录下(默认 ~/.nvm/alias/default)写入字符串 v16.15.0。可以用下面命令看:
cat ~/.nvm/alias/default
# 输出: v16.15.0
以后每次打开一个新的终端(并且 nvm 被初始化了),它会读取这个 default alias,自动使用 v16.15.0 作为当前版本。
注意:它不会主动切换当前的 node 版本,而是设置一个“默认”版本,后续新开 shell 会自动用这个版本(相当于给 nvm 记住要用哪个)
所以,如果从来没执行过 nvm use v16.15.0,那 nvm alias default v16.15.0 就是一个“无效的指针”。
✅ 正确做法建议
永远建议这样设置默认版本:
nvm install v16.15.0 # 如果未安装
nvm use v16.15.0 # 初始化 use 一次
nvm alias default v16.15.0
🔧 补充检查
-
是否在 shell 启动时加载了 nvm?
检查 ~/.bashrc, ~/.zshrc, ~/.bash_profile 是否有以下内容:
export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
-
是否是非交互式 shell?
一些终端(如 VSCode 的内置终端)可能不会自动加载 nvm,这时要手动执行 nvm use default。