返回项目目录
运行时精选项目

Node.js

基于 V8、用于服务器、命令行工具和网络应用的跨平台 JavaScript 运行时。

主要语言C++ / JavaScript
开源许可MIT
项目类型运行时
维护状态活跃维护
OVERVIEW

项目概述

Node.js 把 JavaScript 带到浏览器之外,以事件循环和非阻塞 I/O 支撑网络服务、自动化工具与完整的 npm 生态,是现代 Web 开发最成熟的基础运行时之一。

Node.js 是采用 MIT 许可证的开源、跨平台 JavaScript 运行时,由 OpenJS Foundation 下的项目治理体系和全球贡献者共同维护。它在浏览器之外运行 V8 JavaScript 引擎,通过 libuv 提供事件循环、异步文件与网络 I/O,并在单个进程中高效处理大量并发连接。Node.js 同时提供文件系统、HTTP、Stream、Crypto、Worker Threads、测试和诊断等核心模块,并以 npm 与 package.json 连接庞大的第三方软件生态。生产应用应优先选择官方仍受支持的 LTS 版本;本页核验时 v24 Krypton 是推荐的 LTS 主线,v26 为 Current。

推荐生产主线Node.js 24 LTS
JavaScript 引擎V8
异步 I/O 基础libuv + Event Loop
FEATURES

主要特点

Node.js 把成熟的 JavaScript 引擎、异步系统能力和包生态组合为通用的服务器端运行平台。

01

事件驱动与非阻塞 I/O

事件循环配合异步文件、网络和 DNS 接口,让一个进程可以在等待外部资源时继续处理其他工作,适合高并发 I/O 场景。

02

V8 与跨平台运行

使用 Chrome 的 V8 引擎执行现代 JavaScript,并为 Linux、macOS、Windows 等平台提供官方二进制文件。

03

完整的核心模块

内置 HTTP、HTTP/2、TLS、Stream、Buffer、File System、Crypto、Process、URL、WebSocket 与 SQLite 等系统和网络能力。

04

npm 与 package.json 生态

通过 npm Registry、语义化版本、锁文件、脚本和 Workspaces 使用数量庞大的库、框架及开发工具。

05

CommonJS 与 ES Modules

同时支持 require 的 CommonJS 和标准 import/export,并通过 package.json 的 type、exports 与 imports 明确包边界。

06

Stream、Buffer 与背压

以流式接口处理文件、压缩、网络和大体积数据,避免一次性把所有内容加载到内存,并在生产者和消费者之间传递背压。

07

并行与进程能力

可使用 Worker Threads 处理适合并行计算的 JavaScript 任务,也能通过 Child Process 和 Cluster 连接外部程序或利用多核。

08

内置测试与诊断工具

node:test、断言、Mock、代码覆盖率、Inspector、性能钩子、诊断报告和 AsyncLocalStorage 覆盖基础测试与可观测需求。

USE CASES

适用场景

从轻量脚本到大规模网络服务,Node.js 尤其适合 I/O 密集、需要共享 Web 技术栈或依赖 npm 生态的项目。

Web API 与后端服务

适合 REST、GraphQL、Webhook、认证服务和面向前端的 BFF,可搭配 Fastify、Express、NestJS 等框架。

实时与长连接应用

事件驱动模型适合聊天、协作、通知、游戏网关和其他 WebSocket 或持续连接服务。

命令行与自动化工具

文件、进程和网络 API 加上 npm 分发能力,适合构建脚手架、代码生成器、CI 工具和运维脚本。

全栈 JavaScript 应用

前后端共享 JavaScript 或 TypeScript、校验 Schema 和领域类型,降低团队在多语言之间切换的成本。

流式数据处理

Stream 与 Buffer 适合代理、上传下载、日志管线、压缩和逐块转换等不应一次性占用大量内存的任务。

Serverless 与容器工作负载

广泛的云平台、容器镜像、监控和 CI 支持,使其适合函数、微服务及传统长驻进程等多种交付方式。

EVALUATION

优点与注意事项

技术选型不仅要看能力,也要理解它带来的团队成本。

主要优点

Node.js 擅长的地方

  • 生态规模大,Web 框架、数据库客户端、SDK 和开发工具选择丰富
  • 浏览器与服务器可以共享 JavaScript、TypeScript 经验和部分业务模型
  • 非阻塞 I/O 对 API、代理和实时连接等场景非常合适
  • Linux、macOS、Windows、容器与主流云平台的支持成熟
  • LTS 发布策略、升级文档和生产运维经验相对完善
  • 既能使用低层核心模块,也能按需要选择不同抽象程度的框架

需要注意

采用前应考虑的问题

CPU 密集任务会阻塞事件循环

大型计算、同步加密和复杂序列化会延迟同一进程内的其他请求,应拆分工作、使用 Worker Threads、任务队列或独立计算服务。

异步不等于自动高性能

未设置超时、无限并发、未处理背压或过度串行 await 都可能降低吞吐,需要结合压力测试、指标和性能分析调整。

依赖供应链需要治理

npm 包数量多且依赖树可能很深,应使用锁文件、审计、最小依赖、可信发布和更新流程降低恶意包与维护中断风险。

ESM 与 CommonJS 边界

模块类型、文件扩展名、条件导出和默认导入行为可能造成兼容问题,库作者应明确 exports,应用应统一模块策略。

权限模型不是恶意代码沙箱

Node.js 进程默认继承操作系统用户权限;可选 Permission Model 只用于约束受信任代码的意外访问,不能抵御恶意代码绕过。

版本与原生扩展兼容

EOL 版本不再接收常规安全修复。升级主版本前应验证 Node-API 插件、构建工具、监控探针和托管平台支持。

内置 TypeScript 支持有边界

现代 Node.js 能直接擦除并运行部分 TypeScript 类型语法,但不会类型检查,也不读取 tsconfig 完成完整转换;复杂项目仍需 TypeScript 或 tsx 等工具。

QUICK START

快速开始

使用原生 HTTP、Fetch 和 node:test 构建一个不依赖第三方框架的最小 JSON API。

1确认 LTS 环境并初始化项目
bash
node --version
npm --version

mkdir hello-node
cd hello-node
npm init -y
npm pkg set type=module
2创建原生 JSON API
javascript
// app.js
import { createServer } from "node:http";

function sendJson(response, status, body) {
  response.writeHead(status, {
    "content-type": "application/json; charset=utf-8",
  });
  response.end(JSON.stringify(body));
}

export function createApp() {
  return createServer((request, response) => {
    const url = new URL(request.url ?? "/", "http://localhost");

    if (request.method === "GET" && url.pathname === "/health") {
      return sendJson(response, 200, { status: "ok" });
    }

    if (request.method === "GET" && url.pathname === "/api/hello") {
      const name = url.searchParams.get("name") ?? "World";
      return sendJson(response, 200, {
        message: `Hello, ${name}!`,
        runtime: "Node.js",
      });
    }

    return sendJson(response, 404, { error: "Not found" });
  });
}
3添加服务入口与优雅退出
javascript
// server.js
import { createApp } from "./app.js";

const port = Number(process.env.PORT ?? 3000);
const server = createApp();

server.listen(port, "127.0.0.1", () => {
  console.log(`http://127.0.0.1:${port}`);
});

function shutdown(signal) {
  console.log(`${signal}: closing server`);
  server.close((error) => {
    process.exitCode = error ? 1 : 0;
  });
}

for (const signal of ["SIGINT", "SIGTERM"]) {
  process.on(signal, () => shutdown(signal));
}
4使用内置测试运行器测试 API
javascript
// app.test.js
import assert from "node:assert/strict";
import test from "node:test";
import { createApp } from "./app.js";

test("GET /api/hello returns JSON", async (context) => {
  const server = createApp();
  await new Promise((resolve) => {
    server.listen(0, "127.0.0.1", resolve);
  });
  context.after(() => server.close());

  const address = server.address();
  const response = await fetch(
    `http://127.0.0.1:${address.port}/api/hello?name=Ada`,
  );

  assert.equal(response.status, 200);
  assert.deepEqual(await response.json(), {
    message: "Hello, Ada!",
    runtime: "Node.js",
  });
});
5配置常用项目脚本
json
{
  "type": "module",
  "scripts": {
    "dev": "node --watch server.js",
    "start": "node server.js",
    "test": "node --test"
  }
}
6测试并运行服务
bash
npm test
npm run dev

# 在另一个终端验证接口
curl "http://127.0.0.1:3000/api/hello?name=Ada"
curl "http://127.0.0.1:3000/health"

下一步:生产环境优先采用仍受支持的 LTS 主线并锁定依赖;为请求设置超时和大小限制,把 CPU 密集任务移出事件循环,并在升级 Node.js 主版本前验证原生模块、监控工具和部署平台。

ALTERNATIVES

类似项目

这些运行时同样可以执行服务端 JavaScript,但在兼容性、安全模型、工具集成和部署形态上有所不同。

COMPARISON

Node.js vs Deno

Node.js 和 Deno 都使用 V8 执行服务端 JavaScript。Node.js 以兼容性、npm 生态和长期生产实践见长,Deno 则更强调 Web 标准、默认权限隔离和一体化工具链。

比较维度Node.jsDeno
项目定位成熟、通用的跨平台 JavaScript 运行时现代化 JavaScript / TypeScript 运行时与工具链
TypeScript可擦除部分类型语法;完整支持通常使用额外工具直接执行 TypeScript,并以 deno check 独立检查类型
安全权限默认继承系统权限,可选 Permission Model敏感 I/O 默认拒绝,运行时显式授权
工具链提供 npm 与核心工具,常组合第三方格式化和 Lint 工具内置 fmt、lint、test、bench、doc 与 compile
依赖管理package.json、npm Registry、锁文件和 node_modulesdeno.json、JSR、npm 兼容与全局缓存
模块兼容同时承载庞大的 CommonJS 与 ESM 生态以 ESM 为主,并提供 Node.js 与 npm 兼容层
生产生态云平台、监控、框架、人才和案例覆盖广生态较小,但工具和运行时体验更统一
更适合依赖成熟 npm 生态、广泛平台支持和长期运维经验的系统重视 TypeScript、Web 标准和最小权限的新服务与工具
如何选择

已有服务深度依赖 npm 包、原生扩展、成熟监控或企业部署平台时,Node.js 通常是更稳妥的默认选择;新建 TypeScript 服务或自动化工具、希望减少工具拼装并严格控制 I/O 权限时,可以重点评估 Deno。无论选择哪一个,都应使用仍受支持的版本,并以真实依赖、负载和部署目标验证兼容性。

VERIFICATION

资料核验

版本、维护信息与本页采用的官方资料来源。

最后核验2026 年 7 月 26 日
核验版本v24.18.0 LTS / v26.5.0 Current
内容维护Docs100 编辑整理
项目维护状态活跃维护

本页依据 Node.js 官方学习资料、当前 API 文档、版本支持页面和 nodejs/node 仓库整理。快速开始以仍受支持的 LTS 能力为基线,采用 ES Modules、原生 HTTP、Fetch 与稳定的 node:test;生产环境应优先选择官方 LTS,并在升级前再次核对最新版本、弃用项和安全公告。

维护状态核验2026 年 7 月 26 日 · 最近可见代码活动:2026 年 7 月 25 日

官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 7 月 25 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。

查看官方仓库