结论:别用系统默认包管理器装 nodejs,它常把 node 命令改成 nodejs,导致后续工具链(如 npx、构建脚本)直接报错;LTS 版本优先选 NodeSource 仓库或 nvm,二者都绕过这个坑。

直接说结论:别用系统默认包管理器装 nodejs,它常把 node 命令改成 nodejs,导致后续工具链(如 npx、构建脚本)直接报错;LTS 版本优先选 NodeSource 仓库或 nvm,二者都绕过这个坑。
为什么 node -v 报 command not found
这不是没装,而是路径没进 $PATH,或命令名被改了。Ubuntu/Debian 默认安装后只有 nodejs,没有 node;CentOS 7 的 nodejs 包甚至不带 npm。现象包括:
-
which node返回空,但which nodejs有输出 -
nodejs -v能显示版本,但npm install报错找不到node -
npm -v报 command not found,即使nodejs已存在
根本原因是发行版维护者为避免和 node(业余无线电软件)冲突,做了重命名。修复方法不是加软链凑合,而是换安装源。
NodeSource 安装 LTS 版(推荐生产环境)
它提供标准命名的二进制包,node 和 npm 命令开箱即用,且版本更新及时。操作分三步,无脑执行即可:
- Ubuntu/Debian:
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -,再sudo apt install -y nodejs - CentOS/RHEL/Fedora:
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -,再sudo yum install -y nodejs(CentOS 7)或sudo dnf install -y nodejs(8+) - 装完立刻验证:
node -v和npm -v都应输出版本号,且which node指向/usr/bin/node
注意:NodeSource 不会覆盖系统原有 nodejs 包,卸载旧包再装更干净——sudo apt remove nodejs npm(Ubuntu)或 sudo yum remove nodejs(CentOS)。
nvm 管理多版本(适合开发者日常)
如果你要同时跑 v16、v18、v20,或者经常切项目调试兼容性,nvm 是唯一合理选择。它不碰系统路径,所有东西都在 ~/.nvm 下,切换版本只需一条命令:
- 装 nvm:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash - 重载配置:
source ~/.bashrc(bash)或source ~/.zshrc(zsh) - 装 LTS:
nvm install --lts,设默认:nvm alias default lts - 验证:
node -v应输出类似v18.20.4,且which node指向~/.nvm/versions/node/v18.20.4/bin/node
关键点:nvm 的 node 命令只在当前 shell 有效;如果开新终端失效,说明 source 没写进 shell 初始化文件,检查 ~/.bashrc 或 ~/.zshrc 是否真包含 nvm 加载段。
手动解压配环境变量(仅限离线或定制需求)
适用于无法联网、或需指定安装路径的场景,但必须自己配好 PATH,否则照样 command not found:
- 下载并解压:
wget https://nodejs.org/dist/v20.15.0/node-v20.15.0-linux-x64.tar.xz && tar -xJf node-v20.15.0-linux-x64.tar.xz - 移至固定位置:
sudo mv node-v20.15.0-linux-x64 /opt/nodejs - 写入全局环境:
echo 'export PATH=/opt/nodejs/bin:$PATH' | sudo tee /etc/profile.d/nodejs.sh - 生效:
source /etc/profile.d/nodejs.sh
这里必须用 /opt/nodejs/bin,不能写成 /opt/nodejs——node 和 npm 可执行文件在 bin/ 子目录里。漏掉 /bin 是新手最常踩的坑。


















