node.js(1)ubuntu安装node和npm
Author: Once Day Date: 2026年3月9日
一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦...
漫漫长路,有人对你微笑过嘛...
全系列文章可参考专栏: FullStack开发_Once-Day的博客-CSDN博客
参考文章:
文章目录
- node.js(1)ubuntu安装node和npm
-
-
-
- [1. 概述](#1. 概述)
- [2. 安装方式概览](#2. 安装方式概览)
- [3. nvm 安装方式](#3. nvm 安装方式)
- [4. npm 包安装位置](#4. npm 包安装位置)
- [5. 安装后的验证与基本配置](#5. 安装后的验证与基本配置)
- [6. 常见问题与注意事项](#6. 常见问题与注意事项)
-
-
1. 概述
Node.js 是一个基于 Chrome V8 引擎构建的 JavaScript 运行时环境,它使得 JavaScript 代码能够脱离浏览器,在服务端或本地操作系统上直接运行。自 2009 年由 Ryan Dahl 发布以来,Node.js 凭借其事件驱动和非阻塞 I/O 模型,在高并发网络服务、命令行工具、构建系统等领域得到了广泛应用。当前许多主流前端工程化工具链,如 Webpack、Vite、ESLint 等,均依赖 Node.js 作为底层运行环境。
安装 Node.js 后,系统中会出现一个名为 node 的可执行程序,它就是 Node.js 的运行入口。在终端中执行 node 命令可以启动一个交互式的 REPL(Read-Eval-Print Loop)环境,也可以通过 node script.js 的方式直接运行指定的 JavaScript 脚本文件。日常开发中提到的"安装 Node",实际上就是在系统中部署这个 node 可执行文件及其配套的标准库和工具。
npm(Node Package Manager)是 Node.js 的默认包管理器,通常随 Node.js 一同安装。它主要承担两方面职责:其一是作为命令行工具,提供依赖安装、版本管理、脚本执行等功能;其二是连接 npmjs.com 这一全球最大的开源包注册中心,开发者可以从中检索并下载超过两百万个开源模块。通过一条简单的 npm install 命令,即可将所需的第三方库拉取到项目的 node_modules 目录中。
在实际项目中,npm 通过项目根目录下的 package.json 文件来描述项目元信息及其依赖关系。该文件记录了项目名称、版本号、入口文件、依赖列表以及可执行的脚本命令等内容。与之配套的 package-lock.json 文件则用于锁定依赖树的精确版本,确保不同环境下安装结果的一致性。这种声明式的依赖管理方式,是现代 JavaScript 工程体系的基石之一。
除 npm 外,社区还衍生出了 yarn 和 pnpm 等替代方案,它们在安装速度、磁盘占用、依赖提升策略等方面各有优化。不过,由于 npm 随 Node.js 内置分发,且近年来在性能和功能上持续改进,对于大多数场景而言已经足够胜任,因此本文后续的安装与配置流程将以 npm 为主进行说明。
2. 安装方式概览
在 Ubuntu 系统上安装 Node.js,有多种途径可供选择,不同方式在版本新旧、管理灵活性和操作复杂度上各有差异。选择合适的安装方式,往往取决于实际的开发需求和环境管理要求。
最直接的方式是通过 Ubuntu 自带的 apt 包管理器进行安装,只需执行 sudo apt install nodejs npm 即可完成。然而,Ubuntu 官方软件源中的 Node.js 版本通常严重滞后 于上游发布。例如在 Ubuntu 22.04 LTS 中,默认源提供的 Node.js 版本仅为 v12.x,而截至目前上游的 LTS 版本已迭代至 v20.x 甚至更高。过旧的版本不仅缺少新的语言特性支持,还可能导致许多现代前端工具链和框架无法正常运行。因此,直接使用默认 apt 源安装的做法,仅适合对版本无要求的简单测试场景。
为解决版本滞后的问题,NodeSource 团队维护了一套第三方 apt 仓库,提供与官方同步更新的 Node.js 发行包。通过添加该 PPA 源后再执行 apt install,可以安装到指定大版本的最新 Node.js。这种方式保留了 apt 统一管理系统软件包的优势,适合在服务器等仅需部署单一固定版本的环境中使用。
另一种方式是从 Node.js 官方网站直接下载预编译的二进制压缩包,手动解压至指定目录并配置 PATH 环境变量。这种方式不依赖任何包管理器,可控性最强,但后续的版本升级和卸载均需手动操作,维护成本相对较高。
对于日常开发而言,更推荐使用 nvm(Node Version Manager)来安装和管理 Node.js。nvm 是一个轻量级的 Shell 脚本工具,能够在同一台机器上安装并维护多个 Node.js 版本,并通过简单的命令在不同版本之间自由切换。这在需要同时维护多个项目、且各项目依赖不同 Node.js 版本的场景下尤为实用。以下表格对上述几种安装方式做了简要对比:
| 安装方式 | 版本时效性 | 多版本管理 | 维护成本 | 适用场景 |
|---|---|---|---|---|
apt 默认源 |
较差,版本严重滞后 | 不支持 | 低 | 简单测试、对版本无要求 |
NodeSource 源 |
良好,与官方同步 | 不支持 | 低 | 服务器部署、单版本需求 |
| 官方二进制包 | 良好,手动选择版本 | 需手动管理 | 高 | 离线环境、特殊定制需求 |
nvm |
良好,版本列表实时获取 | 原生支持 | 低 | 日常开发、多项目多版本管理 |
综合来看,如果仅需在服务器上部署固定版本的运行环境,使用 NodeSource 源配合 apt 是较为稳妥的选择;而在本地开发环境中,nvm 凭借其灵活的多版本管理能力,几乎已成为事实上的标准方案。后续章节将分别对 apt 安装和 nvm 安装两种主要方式进行详细说明。
3. nvm 安装方式
nvm 的安装过程本身比较简单,官方提供了一键安装脚本,通过 curl 下载并执行即可完成部署。需要注意的是,该脚本托管在 GitHub 的 raw.githubusercontent.com 域名下,在国内网络环境中通常无法直接访问 ,因此执行安装命令前需要确保终端已正确配置代理。常见的做法是在当前 Shell 会话中设置 HTTP 代理环境变量:
bash
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
代理配置就绪后,执行以下命令下载并运行 nvm 安装脚本,其中版本号 v0.39.7 可根据实际需要替换为最新版本:
bash
curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
该脚本会将 nvm 仓库克隆至用户主目录下的 ~/.nvm 路径,并自动向 ~/.bashrc 文件末尾追加环境初始化语句。安装完成后,当前终端会话尚未加载这些新增的配置,因此需要手动执行一次 source 命令使其生效,或者直接重新打开一个终端窗口:
bash
source ~/.bashrc
如果使用的是 zsh 而非默认的 bash,则对应的配置文件为 ~/.zshrc,需要改为 source ~/.zshrc。加载完成后,可以通过 nvm --version 命令确认安装是否成功。
接下来使用 nvm 安装 Node.js。推荐安装当前最新的 LTS(Long Term Support)版本,该版本经过充分测试,兼顾了稳定性与功能特性,适合绝大多数开发和生产场景。以下三条命令分别完成安装、切换和设置默认版本的操作:
bash
# 安装最新 LTS 版本
nvm install --lts
# 切换当前会话使用 LTS 版本
nvm use --lts
# 将 LTS 版本设为所有新终端的默认版本
nvm alias default lts/*
其中 nvm alias default 这一步容易被忽略,若未执行该命令,每次打开新终端时 nvm 不会自动激活任何 Node.js 版本,导致 node 命令不可用。安装完成后,npm 会随 Node.js 一同就位,可直接使用 npm install 安装所需的依赖包。例如,以下命令通过 -g 参数将 Google 发布的 Gemini CLI 工具安装为全局命令行程序:
bash
npm install -g @google/gemini-cli
通过 nvm 安装的 Node.js 及其全局包均位于 ~/.nvm 目录下的对应版本文件夹中,完全处于用户空间,无需 sudo 权限 。这一特性避免了系统级安装中常见的权限冲突问题,也使得不同版本之间的隔离更加干净。后续若需要安装其他版本,只需执行 nvm install <version> 即可,多个版本可以并存,通过 nvm use 随时切换。
4. npm 包安装位置
npm 安装包分为局部安装 和全局安装 两种模式。执行 npm install <package> 时,依赖会被下载到当前项目目录下的 node_modules 文件夹中,这属于局部安装,与 Node.js 本身的安装方式无关。而执行 npm install -g <package> 进行全局安装时,包的实际存放路径则取决于 Node.js 是通过何种方式安装的。
通过 apt 包管理器安装的 Node.js,其全局包默认存放在系统级目录中,通常为 /usr/lib/node_modules 或 /usr/local/lib/node_modules。全局安装的可执行文件则以符号链接的形式出现在 /usr/local/bin 目录下。由于这些路径均属于系统目录,执行全局安装操作时必须使用 sudo 提权,否则会因权限不足而报错。这种方式虽然符合 Linux 系统软件管理的传统惯例,但频繁使用 sudo 执行 npm 命令存在一定的安全隐患,也容易造成文件权限混乱。
通过 nvm 安装的 Node.js,所有相关文件均位于当前用户主目录下的 ~/.nvm 路径中。以 v20.18.0 版本为例,全局包的存放路径为 ~/.nvm/versions/node/v20.18.0/lib/node_modules,对应的可执行文件位于 ~/.nvm/versions/node/v20.18.0/bin。由于整个目录树都处于用户空间,全局安装操作无需 sudo 权限即可完成。此外,不同 Node.js 版本的全局包各自独立存放、互不干扰,切换版本时全局包也会随之切换。
若需确认当前环境下 npm 的实际安装路径,可以通过以下命令进行查看:
bash
# 查看全局包的安装根目录
npm root -g
# 查看全局可执行文件的安装目录
npm bin -g
# 查看 npm 的完整配置信息,其中 prefix 字段即为全局安装的前缀路径
npm config list
# 直接查看 prefix 配置项
npm config get prefix
其中 npm root -g 最为直观,它会直接输出全局 node_modules 的绝对路径。例如在 nvm 环境下,输出可能为 /home/user/.nvm/versions/node/v20.18.0/lib/node_modules;而在 apt 安装的环境下,输出通常为 /usr/local/lib/node_modules。如果需要查看某个已安装的全局包的具体位置,也可以结合 npm list -g 命令列出所有全局包及其版本信息:
bash
# 仅列出顶层全局包,不展开依赖树
npm list -g --depth=0
了解包的安装位置有助于排查模块找不到、命令不可用等常见问题。在实践中,如果执行全局安装的 CLI 工具后终端提示 command not found,通常意味着对应的 bin 目录尚未被加入 PATH 环境变量,此时可通过 npm bin -g 确认路径后手动补充配置。
5. 安装后的验证与基本配置
Node.js 和 npm 安装完成后,首先应确认各工具是否正确就位。在终端中依次执行以下命令,检查版本号是否符合预期:
bash
# 查看 Node.js 版本
node -v
# 查看 npm 版本
npm -v
# 若使用 nvm 安装,还可确认 nvm 自身版本及当前激活的 Node.js 版本
nvm --version
nvm current
如果上述命令均正常输出版本号,说明安装过程已经成功。若出现 command not found 提示,通常是环境变量未正确加载,可以检查 ~/.bashrc 或 ~/.zshrc 中是否包含 nvm 的初始化语句,并重新执行 source 使其生效。
在验证基本安装无误后,建议对 npm 的全局安装路径进行一次确认,确保后续安装全局工具时不会出现权限或路径问题:
bash
# 确认全局包安装前缀
npm config get prefix
# 确认全局 node_modules 路径
npm root -g
对于 nvm 环境,上述输出应指向 ~/.nvm/versions/node/<version> 下的对应目录。如果发现 prefix 指向了 /usr/local 等系统路径,说明可能存在残留的旧配置,此时可通过 npm config delete prefix 清除自定义设置,让 nvm 接管路径管理。
npm 默认从 https://registry.npmjs.org 拉取包数据,该服务器位于海外,在国内网络环境下下载速度往往较慢甚至超时。将 registry 切换为国内镜像源可以显著改善这一问题,目前使用较广泛的是淘宝维护的镜像站。配置方式如下:
bash
# 将 registry 设置为淘宝镜像源
npm config set registry https://registry.npmmirror.com
# 验证是否生效
npm config get registry
该配置会写入用户主目录下的 ~/.npmrc 文件中,对当前用户的所有项目全局生效。需要注意的是,如果后续需要向 npmjs.com 发布包,必须临时切换回官方源,否则 publish 操作会失败。可以通过 npm config set registry https://registry.npmjs.org 切换回来,或者在发布命令中使用 --registry 参数临时指定。
此外,还有几项可选配置值得关注。npm 默认的初始化信息可以预先设定,避免每次 npm init 时重复输入:
bash
npm config set init-author-name "YourName"
npm config set init-license "MIT"
所有用户级配置均可通过 npm config list 查看完整列表,也可以直接编辑 ~/.npmrc 文件进行修改。至此,Node.js 开发环境的基础配置已经完成,可以正常进行项目开发和依赖管理。
6. 常见问题与注意事项
在实际使用过程中,Node.js 环境相关的问题多集中在权限、环境变量和版本兼容三个方面。提前了解这些常见情况,有助于在遇到问题时快速定位原因。
权限问题是使用 apt 方式安装时最常遇到的困扰。由于系统级安装的 Node.js 将全局包存放在 /usr/local/lib/node_modules 下,执行 npm install -g 时若未添加 sudo 便会报出 EACCES: permission denied 错误。部分开发者习惯性地在所有 npm 命令前加 sudo,这可能导致项目目录下的 node_modules 文件属主变为 root,后续以普通用户身份操作时又会产生新的权限冲突。最根本的解决方式是改用 nvm 管理 Node.js,将所有文件限定在用户空间内,从源头规避权限问题。
环境变量配置不当通常表现为终端提示 node: command not found 或全局安装的 CLI 工具无法识别。出现这类问题时,可以按以下步骤逐一排查:
bash
# 确认 node 可执行文件的实际位置
which node
# 查看当前 PATH 环境变量中是否包含对应路径
echo $PATH
# 若使用 nvm,检查 ~/.bashrc 中是否包含以下初始化语句
# export NVM_DIR="$HOME/.nvm"
# [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
一个容易忽略的情况是,在 Ubuntu 桌面环境下使用非登录式 Shell(例如从文件管理器中打开终端)时,~/.bash_profile 中的配置可能不会被加载。建议将 nvm 的初始化语句统一写入 ~/.bashrc 而非 ~/.bash_profile,以确保在各种终端启动方式下均能正常生效。此外,如果系统中同时存在通过 apt 安装的旧版 Node.js,PATH 中的路径优先级可能导致 nvm 安装的版本被覆盖,此时应先通过 sudo apt remove nodejs npm 卸载系统版本,避免多源冲突。
版本兼容性方面,不同的前端框架和工具链对 Node.js 的最低版本有明确要求。例如 Vue 3 的构建工具 Vite 5 要求 Node.js >= 18.0,Angular 17 要求 Node.js >= 18.13,而一些较新的工具如 @google/gemini-cli 可能要求 Node.js >= 20.0。项目根目录下的 package.json 中通常会通过 engines 字段声明所需的版本范围:
json
{
"engines": {
"node": ">=18.0.0",
"npm": ">=9.0.0"
}
}
在使用 nvm 的环境下,可以在项目根目录放置一个 .nvmrc 文件,写入所需的版本号(如 lts/hydrogen 或 20),之后进入该目录时执行 nvm use 即可自动切换至对应版本,减少因版本不匹配引发的构建失败。
最后还需注意 npm 自身的版本问题。Node.js 安装包中内置的 npm 版本并非总是最新的,某些场景下可能需要单独升级。可通过以下命令将 npm 更新至最新版本:
bash
npm install -g npm@latest
如 lts/hydrogen 或 20),之后进入该目录时执行 nvm use 即可自动切换至对应版本,减少因版本不匹配引发的构建失败。

Once Day
也信美人终作土,不堪幽梦太匆匆......
如果这篇文章为您带来了帮助或启发,不妨点个赞👍和关注!
(。◕‿◕。)感谢您的阅读与支持~~~