4. macOS/Linux 安装 NVM:脚本安装、环境变量与验证

好,咱们进入实战环节。前面聊了那么多 NVM 的理念和版本选择,现在该动手了。

这一章,我带你走一遍 macOS 和 Linux 上的标准安装流程。别小看这几步,我在项目里见过太多人栽在环境变量配置上——明明装了,就是找不到命令。说白了,就是差那么一个 source 的功夫。

4.1 安装前的准备:先看看你手头有什么

动手之前,先确认两件事:

  • 你的系统有没有 curl 或 wget——这两个是下载脚本的“搬运工”。macOS 默认带 curl,Linux 发行版一般也都有。实在没有?apt install curl 或 yum install curl 先装上。
  • 你的 shell 是 bash 还是 zsh——macOS Catalina 之后默认 zsh,老系统或 Linux 多半是 bash。这决定了你后面把环境变量写进哪个文件。
我的习惯:先跑一句 echo $SHELL 看一眼。如果是 /bin/zsh,后面就改 ~/.zshrc;如果是 /bin/bash,就改 ~/.bashrc 或 ~/.bash_profile。别搞混,不然 source 了也没用。

4.2 用 curl 或 wget 安装 NVM

NVM 官方推荐用脚本安装。你打开终端,复制下面其中一条就行:

# 方式一:用 curl(推荐)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

# 方式二:用 wget
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

脚本会帮你做三件事:

  1. 从 GitHub 拉 NVM 源码到 ~/.nvm 目录。
  2. 自动检测你的 shell 类型,把环境变量追加到对应的配置文件里。
  3. 提示你执行 source 或重启终端。

嗯,这里要注意——脚本执行完并不代表 NVM 马上能用。它只是把东西放好了,还没“激活”。

我曾经踩过的坑:有次在 CI 环境里装 NVM,脚本跑完直接下一步就报 command not found: nvm。排查了半天,发现是脚本追加环境变量时写进了 ~/.bashrc,但 CI 的 shell 是非交互模式,根本不加载 .bashrc。后来我手动在 ~/.bash_profile 里加了一行 source ~/.bashrc 才解决。所以,生产环境或自动化脚本里,一定要搞清楚 shell 的加载链。

4.3 配置环境变量:手动补一刀

虽然安装脚本会自动配置,但我建议你手动检查一下。打开你的 shell 配置文件:

# 如果你用 zsh
vim ~/.zshrc

# 如果你用 bash
vim ~/.bashrc

看看文件末尾有没有类似这样的内容:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

如果没有,手动粘贴进去。这三行的作用:

  • 第一行:告诉系统 NVM 装在哪。
  • 第二行:加载 NVM 的核心函数。
  • 第三行:加载命令补全,敲 nvm 后按 Tab 能提示参数。
核心逻辑:NVM 本质上是一组 shell 函数,不是独立的可执行文件。所以必须通过 source 加载到当前 shell 会话里才能用。这也是为什么换了终端窗口就得重新 source 的原因。

4.4 source 命令:让配置立即生效

配置文件改好了,怎么让它立刻生效?两种方式:

# 方式一:source 命令(推荐)
source ~/.zshrc   # 或 source ~/.bashrc

# 方式二:点命令(等价写法)
. ~/.zshrc

执行完这条命令,当前终端窗口就能用 NVM 了。你想想看,如果不 source,就得关掉终端再重新打开——多麻烦。

为什么会这样?因为 shell 配置文件只在登录时或新开终端时加载一次。source 相当于手动触发了一次“重新加载”。

4.5 验证 nvm 命令:确认安装成功

最后一步,验证。跑下面几条命令:

# 检查 nvm 是否可用
nvm --version

# 如果输出版本号,比如 0.39.7,就说明成了
# 如果报 command not found,说明环境变量没加载成功

还可以进一步验证:

# 列出可安装的 Node.js 版本(会花几秒)
nvm ls-remote

# 查看当前已安装的版本(刚装好应该是空的)
nvm ls

我个人习惯在验证时多跑一步 which nvm。如果返回 nvm: shell function,说明加载正确;如果返回一个路径,反而有问题——NVM 不是二进制文件,不应该有路径。

避坑指南:如果你用的是 macOS 且 shell 是 zsh,但 NVM 脚本写进了 ~/.bashrc,那 source 了也没用。解决办法:把环境变量复制到 ~/.zshrc 里,再 source 一次。

4.6 安装流程全景图

下面这张图把整个流程串起来了,你可以对照着走一遍:

NVM 安装流程全景图 NVM 安装流程全景图 步骤 1:检查环境 确认 curl/wget 和 shell 类型 步骤 2:执行安装脚本 curl -o- ...install.sh | bash 步骤 3:检查配置文件 ~/.zshrc 或 ~/.bashrc 步骤 4:手动补环境变量 export NVM_DIR=... 三行 步骤 5:source 生效 source ~/.zshrc 步骤 6:验证 nvm --version 关键提醒 • 脚本自动配置 但建议手动检查 • 环境变量必须 写对配置文件 • source 是激活 当前会话的关键 • 验证用 nvm --version • 新开终端需 重新 source

4.7 常见问题速查表

我把安装过程中最常遇到的问题整理成了表格,方便你对照排查:

问题现象 可能原因 解决办法
curl: command not found 系统未安装 curl 用 apt install curl 或 brew install curl 安装
nvm: command not found 环境变量未加载 检查配置文件,执行 source ~/.zshrc
脚本报 Permission denied 网络或 GitHub 访问问题 检查代理设置,或手动下载脚本执行
nvm --version 输出版本但 nvm ls 为空 尚未安装任何 Node 版本 下一步用 nvm install node 安装
新开终端后 NVM 又失效 环境变量写错了配置文件 确认 shell 类型,写入正确的配置文件