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
脚本会帮你做三件事:
- 从 GitHub 拉 NVM 源码到
~/.nvm目录。 - 自动检测你的 shell 类型,把环境变量追加到对应的配置文件里。
- 提示你执行
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 安装流程全景图
下面这张图把整个流程串起来了,你可以对照着走一遍:
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 类型,写入正确的配置文件 |