调研日期:2026-10-13
核心依据:nodejs.org 官方文档、npm 官方文档及 2026 年第三方对比资料(见文末参考)


1. Node.js 是什么

Node.js 是一个异步事件驱动的 JavaScript 运行时,用于构建可扩展的网络应用程序。

  • 基于 V8 引擎(Chrome 的 JS 引擎)运行 JavaScript
  • 让 JS 可以脱离浏览器,在服务端运行
  • 官方定位:异步、事件驱动、适合 I/O 密集型应用
1
2
3
4
5
6
7
8
9
10
11
12
// 官方 Hello World 示例
const { createServer } = require('node:http');

const server = createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World');
});

server.listen(3000, '127.0.0.1', () => {
console.log('Server running at http://127.0.0.1:3000/');
});

2. 核心原理:事件循环 + 非阻塞 I/O

2.1 单线程事件模型

  • Node.js 使用单线程 + 事件循环(Event Loop) 处理并发,而非操作系统线程
  • 每次连接触发回调函数;没有工作时事件循环进入睡眠
  • 与”每连接一线程”的传统模型对比:线程模型低效且难用,Node 模型无锁、无死锁

2.2 非阻塞 I/O

  • Node.js 几乎没有任何函数直接执行阻塞式 I/O(除非显式使用标准库的同步方法)
  • 发起 I/O 后立即返回,结果就绪后由回调处理
  • 因此进程不会被 I/O 阻塞,可同时处理大量连接

2.3 事件循环作为运行时构造

  • 借鉴了 Ruby EventMachine、Python Twisted 等设计,但把事件循环内置为运行时的一部分
  • 脚本执行完毕后自动进入事件循环,没有更多回调时退出

2.4 多核利用

  • Node 本身单线程,但可通过 child_process.fork() 生成子进程
  • cluster 模块允许多进程共享套接字,在多核上实现负载均衡

3. Node.js 特性与适用场景

3.1 主要特性

  • 异步非阻塞:高并发 I/O 场景表现出色
  • HTTP 一等公民:内置 http 模块,设计考虑流式传输与低延迟,适合做 Web 框架基础
  • npm 生态:全球最大软件包生态(200 万+ 包)
  • 跨平台:Windows / macOS / Linux
  • 前后端同语言:全栈使用 JavaScript/TypeScript

3.2 适用场景

  • Web 服务端 / API 后端(Express、Koa、NestJS)
  • 实时应用:WebSocket、聊天、协作工具
  • 命令行工具(CLI)
  • 前端构建工具链(Webpack、Vite 等)
  • 微服务、中间件、代理服务

3.3 不擅长场景

  • CPU 密集型任务(如图像处理、复杂计算)——单线程会阻塞事件循环,需 worker_threads 或多进程弥补

4. Node.js 版本情况(2026 年)

4.1 版本线一览(截至 2026-10)

版本线 状态 最新版本(参考)
Node.js 24.x LTS(当前主线) 24.21.0(2026-09-07,自带 npm 11.19.0)
Node.js 22.x LTS 22.22.1(2026-03)
Node.js 20.x LTS 20.20.1(2026-03)
Node.js 25.x Current(非 LTS) 25.8.0(2026-03)

4.2 Node.js 24 新特性亮点

  • 显式资源管理:Symbol.dispose / using 语法,块作用域退出时自动释放资源(含 await using 异步版)
  • 内置 fetch 代理支持:NODE_USE_ENV_PROXY=1 让内置 fetch/undici 自动读取 HTTP_PROXY / HTTPS_PROXY 环境变量,无需第三方库即可穿透公司代理

5. npm 是什么

npm(Node Package Manager) 是随 Node.js 一起安装的包管理器,也是全球最大的软件注册表(registry.npmjs.org,托管 200 万+ 包)。

npm 由三部分构成:

  1. 公共注册表:存放已发布包(registry.npmjs.org)
  2. 命令行客户端:与注册表和本地文件系统交互
  3. package.json:描述项目名称、版本、依赖与行为

它解决两个核心问题:

  • 拉取可复用代码:安装 express、mongodb 等库,不用从零编写
  • 描述项目环境:用 package.json 声明依赖与脚本,任何同事/服务器/CI 都能复现完全一致的环境

npm 独立于 Node.js 版本发布(npm -v 与 node -v 是两套版本号)。


6. npm 工作原理

1
2
3
4
5
6
7
8
9
10
npm install <包名>
↓
解析整个依赖树(你的依赖还依赖别人...)
↓
从 registry 下载匹配版本的 tarball
↓
解压到项目根目录 node_modules/
↓
将最终解析的精确版本 + 加密完整性哈希
写入 package-lock.json
  • node_modules/:依赖实际存放目录
  • package-lock.json:锁定精确版本(精确到补丁版本)+ SHA-512 完整性哈希,保证可复现安装
  • package.json:声明直接依赖与版本范围(如 ^4.18.0)

7. npm 常用命令

命令 作用
npm init 初始化项目,生成 package.json
npm install <pkg> 安装依赖并写入 package.json
npm install -D <pkg> 安装开发依赖(devDependencies)
npm ci 按 lockfile 纯净安装(CI 推荐,速度快且确定)
npm run <script> 运行 package.json 中定义的脚本
npm update 更新依赖
npm uninstall <pkg> 卸载依赖
npm audit 安全审计,检查已知漏洞
npm audit fix 自动修复漏洞(兼容版本内)
npm audit signatures 校验包签名

8. npm vs Yarn vs pnpm(2026 对比)

8.1 版本与 Node 支持快照(2026-05 检查)

管理器 当前版本 所需 Node 版本 定位
npm 11.16.0 ^20.17.0 或 >=22.9.0 随 Node 自带,零配置
pnpm 11 11.5.0 >=22.13 monorepo、严格隔离、省磁盘
pnpm 10(LTS) 10.34.1 >=18.12 Node 18/20 老项目
Yarn Modern 4.15.0 >=18.12.0 Plug’n’Play、workspace 策略

8.2 架构差异:依赖布局

npm / Yarn(扁平 node_modules + hoisting)

1
2
3
4
node_modules/
express/ # 你的依赖
accepts/ # express 的依赖被提升到根目录!
mime-types/ # 传递依赖也被提升

问题:可以 import 'accepts'(幽灵依赖)——依赖没写进 package.json 却能使用,靠”碰巧存在”。

pnpm(非扁平 + 内容寻址存储 + 符号链接)

1
2
3
4
5
6
node_modules/
.pnpm/ # 真实包存放处(内容寻址,全局共享)
express@4.19.2/node_modules/
express/
accepts/ # 只有 express 能看到
express -> .pnpm/express@4.19.2/node_modules/express # 符号链接

好处:你的代码只能 import package.json 里声明的依赖,严格隔离、防幽灵依赖、磁盘复用(硬链接)。

8.3 锁文件格式

管理器 锁文件 格式
npm package-lock.json JSON
Yarn yarn.lock 自定义可读格式
pnpm pnpm-lock.yaml YAML

铁律:锁文件必须提交到版本控制,绝不能加入 .gitignore;一个项目只用一个包管理器,禁止混用锁文件。

8.4 功能对比速览

特性 npm Yarn pnpm
随 Node.js 自带 ✅ 需 corepack 需 corepack
安装速度 良好基线 配置后快 缓存复用后常最快
磁盘效率 一般(重复) 一般(重复) 优秀(硬链接)
严格依赖隔离 ❌(扁平) 可选(PnP) ✅(非扁平)
Workspaces 良好 良好 优秀
Plug’n’Play ❌ ✅ ❌

8.5 选型建议

  • 新项目无偏好:Node 版本支持则优先 pnpm(快、省磁盘、防幽灵依赖)
  • 现有 npm 项目团队满意:留在 npm,CI 用 npm ci
  • 大型 monorepo:pnpm(workspace + –filter 最稳健)
  • 团队已用 Yarn Berry:继续 Yarn(PnP 独特优势)
  • 开源库:npm(贡献者熟悉度最高)或 pnpm(文档说明清楚)

8.6 安全对比

  • npm:npm audit / npm audit fix / 包签名校验
  • pnpm:pnpm audit + 非扁平结构天然防幽灵依赖攻击、依赖混淆攻击
  • 所有管理器:lockfile 内置 integrity 哈希(SHA-512)检测包是否被篡改
  • 供应链攻击防护是 2026 年的重点趋势

9. 常见概念补充

9.1 package.json 关键字段

1
2
3
4
5
6
7
8
9
10
{
"name": "my-app",
"version": "1.0.0",
"scripts": { "start": "node index.js", "build": "tsc" },
"dependencies": { "express": "^4.18.0" },
"devDependencies": { "typescript": "^5.0.0" },
"workspaces": ["packages/*"],
"packageManager": "pnpm@11.5.0",
"overrides": { "lodash": ">=4.17.21" }
}

9.2 Corepack

  • Node.js 内置的包管理器版本管理器,corepack enable 后可按 packageManager 字段自动使用指定版本(pnpm / Yarn)
  • 保证所有开发者和 CI 使用同一个包管理器版本

9.3 Workspaces(monorepo)

  • npm / Yarn:package.json 中声明 workspaces
  • pnpm:pnpm-workspace.yaml + --filter 精确操作子包

10. 一句话总结

Node.js 是事件驱动、非阻塞 I/O 的 JavaScript 运行时,用单线程事件循环实现高并发,适合 I/O 密集型服务;npm 是随 Node 附带的包管理器 + 全球最大软件注册表,通过 package.json + lockfile 实现依赖管理与可复现安装。2026 年新项目可考虑 pnpm 获得更严格隔离与更高磁盘效率。


参考来源

  • nodejs.org 官方「关于 Node.js」与版本发布页
  • VersionLog:Node.js 24 (LTS) - What’s New, Support Lifecycle & EOL
  • Programming Line:Node.js npm 原理
  • BytePane:npm vs Yarn vs pnpm 2026: Which Should You Use?
  • npm 官方文档(registry / lockfile / audit)
    (内容由AI生成,仅供参考)