如何安装 Node.js:适用于所有平台的完整技术指南
Node.js 是一个基于 Chrome V8 引擎构建的开源、跨平台 JavaScript 运行时,可在浏览器环境之外执行 JavaScript 代码。其非阻塞、事件驱动的 I/O 模型使其成为构建高吞吐量 API、实时应用程序、微服务和服务器端工具的主流选择。正确安装 Node.js——根据您的操作系统和工作流程选择合适的方法——是建立稳定、可复现开发环境的基础。
本指南涵盖所有主要安装路径:官方安装程序、操作系统原生包管理器、NodeSource 二进制发行版以及 nvm(Node 版本管理器)。同时还涉及版本管理、全局包规范以及大多数教程完全跳过的生产服务器注意事项。
选择正确的安装方法
在运行任何命令之前,请先了解每种方法实际提供的内容——因为错误的选择会在日后造成真实的运维问题。
| 方法 | 最适合 | 版本灵活性 | 需要 Root 权限 | 备注 |
|---|---|---|---|---|
| — | — | — | — | — |
| 官方 `.pkg` / `.msi` 安装程序 | 快速本地设置、初学者 | 仅单一版本 | 是 | 污染系统 PATH;难以切换版本 |
| 操作系统包管理器(`apt`、`brew`、`yum`) | 系统级安装、CI 服务器 | 有限 | 是 | 通常提供过时版本 |
| NodeSource 二进制仓库 | Linux 服务器、可预测的 LTS 版本锁定 | 按安装 | 是 | 由 NodeSource 维护;适合生产环境 |
| `nvm`(Node 版本管理器) | 多项目开发 | 完整,按 Shell 会话 | 否 | 开发者工作站的黄金标准 |
| `fnm`(快速 Node 管理器) | 性能敏感的 CI 流水线 | 完整 | 否 | 基于 Rust,比 nvm 快得多 |
| Docker / 容器镜像 | 隔离、可复现的构建 | 完整,按容器 | 视情况而定 | 最适合微服务和 CI/CD |
关键决策原则:在开发者工作站上,始终使用 nvm 或 fnm。在生产 Linux 服务器上,使用 NodeSource 仓库或容器镜像。切勿在 Ubuntu/Debian 上使用操作系统默认包管理器的 Node.js 包——它提供的版本通常落后当前 LTS 数年之久。
在 Linux 上安装 Node.js
Linux 是大多数 Node.js 生产工作负载实际运行的平台。在这里做对比任何地方都更重要。如果您正在部署到 VPS 托管环境,以下方法可直接应用于您的远程服务器。
方法一:NodeSource 二进制发行版(推荐用于服务器)
NodeSource 维护着最新的、经过签名的 .deb 和 .rpm 包,精确跟踪 Node.js LTS 和 Current 发布线。这是生产 Linux 服务器最可靠的方法。
Ubuntu / Debian:
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejsFedora / CentOS / RHEL / Rocky Linux:
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -
sudo yum install -y nodejs安装后,验证运行时和捆绑的包管理器:
node -v
npm -v重要陷阱:curl | bash 模式以 root 身份执行远程脚本。在安全敏感的环境中,请先下载脚本,检查后再执行:
curl -fsSL https://deb.nodesource.com/setup_lts.x -o nodesource_setup.sh
less nodesource_setup.sh
sudo bash nodesource_setup.sh
sudo apt-get install -y nodejs方法二:nvm——Node 版本管理器(推荐用于开发者)
nvm 将 Node.js 完全安装在您的主目录(~/.nvm)中,无需 sudo,并允许您按项目或按 Shell 会话切换版本。对于任何工作站或多租户服务器(不同应用程序需要不同 Node.js 版本),这是正确的工具。
安装 nvm:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash安装程序会将必要的 Shell 初始化内容追加到 ~/.bashrc、~/.zshrc 或 ~/.profile。重新加载您的 Shell:
source ~/.bashrc安装最新 LTS 版本:
nvm install --lts按版本号安装特定版本:
nvm install 20.14.0在已安装版本之间切换:
nvm use 18
nvm use 20为新 Shell 会话设置持久默认版本:
nvm alias default 20列出所有本地已安装版本:
nvm ls验证当前活动版本:
node -v
npm -v边缘情况——.nvmrc 文件:在项目根目录中放置一个 .nvmrc 文件,其中仅包含版本字符串(例如 20.14.0)。在该目录中运行 nvm use 会自动选择正确的版本。这对于版本漂移会导致细微错误的团队环境至关重要。
echo "20.14.0" > .nvmrc
nvm use方法三:系统包管理器(可用于工具,不适合生产环境)
默认的 apt 或 dnf 仓库提供的 Node.js 版本通常已过时。仅将此方法用于非关键工具:
sudo apt-get update
sudo apt-get install -y nodejs npm在 Fedora / RHEL 9+ 上:
sudo dnf install nodejs在 macOS 上安装 Node.js
方法一:Homebrew(推荐)
Homebrew 是 macOS 开发环境事实上的包管理器。如果尚未安装 Homebrew,请按照 brew.sh 上的说明进行操作。
brew install node安装特定主版本(例如 Node.js 20 LTS):
brew install node@20
brew link --overwrite node@20验证:
node -v
npm -vHomebrew 陷阱:brew upgrade node 会升级到最新版本,这可能会破坏锁定到旧版本的项目。如果您管理多个项目,也应在 macOS 上使用 nvm——工作流程与 Linux 完全相同。
方法二:macOS 上的 nvm
nvm 的安装和使用命令与 Linux 完全相同。使用 Zsh(自 Catalina 起为默认 Shell)的 macOS 用户应在安装后确认 ~/.zshrc 中包含 nvm 初始化块:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"方法三:官方 .pkg 安装程序
从 nodejs.org 下载 .pkg 安装程序,运行并按照向导操作。对于只需要单一 Node.js 版本且无切换计划的用户,这是最简单的方式。安装后,打开终端并确认:
node -v
npm -v在 Windows 上安装 Node.js
方法一:官方 .msi 安装程序
从 nodejs.org 下载 Windows 安装程序(.msi)。选择 LTS 版本用于接近生产的工作,或选择 Current 版本用于体验最新功能。安装程序会自动将 Node.js 注册到系统 PATH 中。
安装后,打开命令提示符或 PowerShell 并验证:
node -v
npm -v重要提示:在安装向导中,有一个可选步骤用于安装 Chocolatey 和用于原生模块(C++ 插件)的构建工具。如果您的项目依赖项包含 bcrypt、sharp 或依赖 node-gyp 的模块,请启用此选项。跳过此步骤会在日后导致难以理解的构建失败。
方法二:Chocolatey
Chocolatey 是一个 Windows 包管理器,支持脚本化、可重复的安装——对于开发者机器配置非常有价值。
打开提升权限的(管理员)命令提示符或 PowerShell:
choco install nodejs-lts验证:
node -v
npm -v方法三:nvm-windows
请注意,适用于 Linux/macOS 的 nvm 无法在 Windows 上运行。Windows 的等效工具是 nvm-windows,这是一个具有类似界面的独立项目。
从 nvm-windows GitHub 发布页面下载安装程序。安装后:
nvm install lts
nvm use lts
node -vWindows Subsystem for Linux(WSL2):在 Windows 上进行严肃 Node.js 开发的开发者应强烈考虑使用带 Ubuntu 的 WSL2。在 WSL2 内部,Linux nvm 的安装方式与原生 Linux 完全相同,开发体验与生产服务器环境的一致性也显著更高。
了解 LTS 与 Current:应安装哪个版本
Node.js 遵循可预测的发布计划,这直接影响您应部署的版本。
| 发布类型 | 发布节奏 | 支持周期 | 使用场景 |
|---|---|---|---|
| — | — | — | — |
| **LTS(长期支持)** | 偶数主版本(18、20、22) | 共 30 个月(12 个月积极支持 + 18 个月维护) | 生产应用程序、企业工作负载 |
| **Current(当前版本)** | 奇数主版本(19、21、23) | 仅 6 个月 | 功能测试、库作者 |
| **维护 LTS** | 老化的 LTS 版本 | 仅安全修复 | 正在迁移的遗留系统 |
经验法则:生产环境始终部署 LTS。仅在需要测试与即将推出的 Node.js 功能的兼容性时,才在隔离的开发环境中使用 Current。
保持 Node.js 最新
过时的 Node.js 版本会使您的应用程序暴露于已知的 V8 引擎漏洞、已弃用的 TLS 配置以及依赖项兼容性问题。将 Node.js 升级视为安全维护,而非可选改进。
使用 nvm(所有平台):
nvm install --lts
nvm reinstall-packages <old-version>
nvm alias default nodenvm reinstall-packages 命令会将全局安装的包从旧版本迁移到新版本——这是大多数指南遗漏的细节,可节省大量时间。
在 Debian/Ubuntu 上使用 NodeSource:
sudo apt-get update && sudo apt-get upgrade nodejs在 macOS 上使用 Homebrew:
brew update && brew upgrade node在 Windows 上使用 Chocolatey:
choco upgrade nodejs-lts管理全局 npm 包
全局 npm 包安装可在系统范围内访问的 CLI 工具。保持全局安装列表最小化——项目特定的工具应放在 devDependencies 中,而非全局安装,以确保跨环境的可复现构建。
安装全局包:
npm install -g yarn
npm install -g pm2
npm install -g typescript列出所有全局安装的包:
npm list -g --depth=0删除全局包:
npm uninstall -g yarn常见的生产相关全局包:
pm2——Node.js 应用程序的进程管理器;处理 Linux 服务器上的集群、自动重启和日志管理
typescript——TypeScript 编译器(tsc)
nodemon——开发文件监视器,在代码更改时自动重启 Node.js 进程
dotenv-cli——加载 .env 文件用于特定环境配置
nvm 与全局包:当您使用 nvm 切换 Node.js 版本时,在之前版本下安装的全局包不会自动可用。请重新安装它们,或使用 nvm reinstall-packages <previous-version> 进行迁移。
安装后:为生产环境配置 npm
在 Node.js 安装完成后,还需要一些额外的配置步骤才能使其准备好用于生产环境。
设置 npm 注册表(可选,用于私有注册表或镜像):
npm config set registry https://registry.npmjs.org/
配置 npm 缓存目录(适用于 /tmp 空间有限的服务器):
npm config set cache /path/to/custom/cache
禁用 package-lock.json 生成(仅当您的团队专门使用 yarn.lock 时):
npm config set package-lock false
为生产环境设置 Node.js 环境变量:
export NODE_ENV=production
将此内容添加到 Linux 服务器上的 /etc/environment 或应用程序的 systemd 单元文件中,以确保 Express.js、Next.js 和其他框架激活其生产优化。
如果您在独立服务器上运行 Node.js 应用程序,请将 pm2 配置为 systemd 服务,以确保应用程序在重启后自动恢复:
pm2 start app.js --name "my-app"
pm2 startup systemd
pm2 save
在反向代理后运行 Node.js
在生产服务器上,Node.js 应用程序绝不应直接暴露在 80 或 443 端口上。使用 Nginx 或 Apache 作为反向代理,并在代理层终止 TLS。这是一个关键的架构决策,安装步骤直接支撑了这一点。
运行在 3000 端口的 Node.js 应用程序的最简 Nginx 配置:
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
将此配置与有效的 TLS 证书配合使用。SSL 证书对于任何处理用户数据、身份验证令牌或 API 请求的 Node.js 应用程序都是必不可少的——而非可选项。通过 certbot 使用 Let’s Encrypt 是标准的免费选项;商业证书适用于企业部署。
Node.js 在共享主机与 VPS 上的对比
一个经常出现的问题:Node.js 能在共享主机上运行吗?
标准的共享虚拟主机环境不以任何有意义的方式支持 Node.js。共享主机专为 PHP 应用程序设计,不提供 Shell 访问、持久进程管理或绑定到自定义端口的能力——而这些都是 Node.js 所必需的。
对于任何真实的 Node.js 部署,您至少需要一个 VPS 托管方案。VPS 为您提供 root 访问权限、像 pm2 这样的持久进程管理器,以及对 Node.js 版本和运行时配置的完全控制。如果您需要在 Node.js 环境旁边使用托管控制面板,带 cPanel 的 VPS 在原始 VPS 访问和托管主机之间提供了一个中间地带。
对于计算密集型 Node.js 工作负载——机器学习推理、视频转码或大规模数据处理——标准 VPS 可能不够用。GPU 托管提供了 CPU 受限的 Node.js 进程无法自行实现的硬件加速。
技术要点核查清单
将此作为部署前验证清单:
版本选择:确认您正在运行活跃的 LTS 版本(node -v 应返回处于活跃支持窗口内的偶数主版本号)
安装方法与环境匹配:开发者机器使用 nvm;服务器使用 NodeSource 或容器
npm 版本是最新的:安装 Node.js 后运行 npm install -g npm@latest——捆绑的 npm 通常不是最新版本
NODE_ENV 已设置:验证 echo $NODE_ENV 在所有服务器环境中返回 productionpm2 list 显示您的应用程序正在运行,且已执行 pm2 startupnpm list -g --depth=0 仅显示必要的 CLI 工具.nvmrc 已提交到仓库:确保所有团队成员和 CI 流水线使用相同的 Node.js 版本常见问题
Node.js LTS 和 Current 有什么区别,我应该安装哪个?
LTS(长期支持)版本是偶数主版本(18、20、22),提供 30 个月的安全和稳定性补丁支持。Current 版本是奇数主版本,仅支持 6 个月。对于任何生产或团队开发工作,请安装 LTS。仅将 Current 用于短期功能实验。
安装后为什么 nvm 显示”command not found”?
nvm 安装程序会将初始化代码追加到您 Shell 的 RC 文件(~/.bashrc 或 ~/.zshrc)中,但当前终端会话尚未重新加载它。运行 source ~/.bashrc(或 Zsh 的 source ~/.zshrc),或打开新的终端窗口。如果问题持续存在,请手动验证 nvm 初始化块是否存在于您 RC 文件的末尾。
我可以在同一台服务器上同时运行多个 Node.js 版本吗?
可以,使用 nvm。每个版本都安装在 ~/.nvm/versions/ 下的独立目录中。您可以使用 nvm use <version> 按 Shell 会话切换活动版本,或使用 .nvmrc 文件按项目切换。运行不同 Node.js 版本的不同进程可以共存而不发生冲突。
为什么不应该从默认的 Ubuntu/Debian apt 仓库安装 Node.js?
默认的 Ubuntu 和 Debian 仓库提供的 Node.js 版本通常落后当前 LTS 两到四个主版本。例如,Ubuntu 22.04 默认提供 Node.js 12——该版本已于 2022 年达到生命周期终止。始终使用 NodeSource 仓库或 nvm 来获取受支持的当前版本。
如何完全卸载 Node.js 并重新开始?
方法取决于安装方式。对于 NodeSource 安装:sudo apt-get remove nodejs && sudo apt-get autoremove。对于 nvm:使用 nvm uninstall <version> 删除特定版本,或完全删除 ~/.nvm 目录并从 RC 文件中删除初始化行。对于 Homebrew:brew uninstall node。对于 macOS/Windows 上的官方安装程序,使用系统标准应用程序卸载程序,并手动删除 /usr/local/lib/node_modules 或 %AppData%npm 下的任何残留目录。
