15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用
18.10.2024

如何安装 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

关键决策原则:在开发者工作站上,始终使用 nvmfnm。在生产 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 nodejs

Fedora / 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

方法三:系统包管理器(可用于工具,不适合生产环境)

默认的 aptdnf 仓库提供的 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 -v

Homebrew 陷阱: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++ 插件)的构建工具。如果您的项目依赖项包含 bcryptsharp 或依赖 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 -v

Windows 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 node

nvm 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 在所有服务器环境中返回 production
  • 进程管理器已配置:pm2 list 显示您的应用程序正在运行,且已执行 pm2 startup
  • 反向代理已就位:Node.js 未直接暴露在 80/443 端口上
  • TLS 在代理层终止:有效证书已安装,HTTPS 重定向已强制执行
  • 全局包列表最小化:npm list -g --depth=0 仅显示必要的 CLI 工具
  • .nvmrc 已提交到仓库:确保所有团队成员和 CI 流水线使用相同的 Node.js 版本
  • 安全更新已自动化:cron 作业或 CI 流水线每月检查新的 LTS 补丁
  • 常见问题

    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 下的任何残留目录。

    15%

    全场主机优惠15%

    测试技能,享折扣

    使用代码:

    Skills
    开始使用