Node.js 是什么
本教程共 76 篇 · 第 1 篇 · 更新于 2026-07-25 · 约 6 分钟阅读
1. Node.js 是什么
本节目标:搞清楚 Node.js 到底是个啥,它和浏览器里的 JavaScript 有什么区别,以及它能帮你做什么、不能做什么。
一句话定义
Node.js 是个让 JavaScript 在浏览器外面跑起来的运行时(Runtime)。
以前 JavaScript 只能待在浏览器里操作网页。2009 年 Ryan Dahl 把 Chrome 的 V8 引擎搬出来,加了文件系统、网络请求这些能力,JavaScript 就能写服务器、写命令行工具、写爬虫了。
所以 Node.js 不是一门新语言,也不是一个框架。它就是 JavaScript 的「后台运行环境」。
Tip很多人把 Node.js 叫成「后端语言」,其实不太准确。JavaScript 才是语言,Node.js 只是让这门语言能在服务器上执行的容器。
为什么需要它
假设你只会 JavaScript,以前想做个网站后端,得去学 Python、Java 或者 PHP。前后端是两套语法、两套生态,脑子得来回切换。
有了 Node.js,你可以:
- 前端页面用 JavaScript 写
- 后端 API 也用 JavaScript 写
- 两边的工具函数(比如数据校验、日期格式化)直接复用
这带来的好处很实在。团队里大家只用一门语言,代码能共享,招人也不用限定「只招后端」。
Node.js 能做什么
别被「服务器端 JavaScript」这个标签局限了,Node.js 的战场很广。
Web 服务与 API
搭个 HTTP 服务器几行代码就能跑:
import { createServer } from 'node:http';
createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World');
}).listen(3000, () => {
console.log('服务器在 http://localhost:3000');
});
用 Express、Fastify、Koa 这些框架,几十行就能搭一个带路由的 REST API。
实时应用
聊天室、在线协作、游戏大厅——这些需要服务端主动推消息的场景,Node.js 的事件模型非常契合。配合 WebSocket,一个进程就能扛住大量长连接。
命令行工具
你平时用的 npm、webpack、vite、eslint,全是 Node.js 写的。写个内部脚手架、自动化脚本、文件批处理,Node.js 是首选。
微服务与网关
轻量、启动快、内存占用低,Node.js 很适合做 API 网关或者单个微服务节点。当然,巨型的核心交易链路可能不是它的主场,后面会说。
和浏览器里的 JavaScript 有什么不同
语法完全一样,但「家」不一样,能调用的 API 也就不同。
| 能力 | 浏览器 | Node.js |
|---|---|---|
| 操作 DOM | document.querySelector | 没有 DOM,因为没页面 |
| 文件系统 | 沙箱限制,不能直接读写 | fs 模块随便读写 |
| 网络请求 | fetch、XMLHttpRequest | http、https,还有内置 fetch(自 v18 起) |
| 全局对象 | window | global(v24 起推荐用 globalThis) |
| 模块系统 | ESM(import) | ESM + CommonJS(require)都能用 |
| 环境控制 | 用户用什么浏览器你管不了 | 你说了算,想升版本就升 |
在浏览器里,你没法打开服务器上的 config.json 直接读。在 Node.js 里,fs.readFileSync('config.json') 一行搞定。反过来,Node.js 里也没有 document 和 window,因为服务器上没有网页给你操作。
还有一个关键区别:Node.js 支持 require()(CommonJS)和 import(ESM)两套模块系统,而浏览器主要走 ESM。这个我们在后续章节细讲。
Note自 v18 起,Node.js 内置了全局
fetch,和浏览器里的用法几乎一致。不用再装node-fetch之类的第三方包了。但注意,Node.js 的fetch底层基于 undici,某些边缘行为和浏览器版仍有差异。
单线程、事件驱动、非阻塞 I/O
这三个词你会在每一本 Node.js 书里看到。我尽量用人话解释。
想象你去一家快餐店点餐:
- 传统多线程模型(比如 Java Tomcat):每个顾客配一个服务员,从头到尾服务完一个再服务下一个。顾客多了就得多招服务员,成本高。
- Node.js 模型:只有一个收银员。你点完餐他给你一个叫号器,去忙下一个人。餐好了叫号器响,你过来取。一个收银员能同时应对几十个人。
这个「叫号器」就是回调函数,收银员不断循环查看谁餐好了,就是事件循环(Event Loop)。因为不用频繁「招服务员」(创建线程),所以内存省、切换开销小。
但这也意味着,如果收银员自己算一道复杂的数学题(CPU 密集型任务),后面所有人都得等着。Node.js 的天敌就是纯计算任务,比如视频转码、大矩阵运算。这类活要么丢给别的服务,要么用 worker_threads 开多线程(第 35 章讲)。
发布节奏:v27 起变天了
Node.js 的版本策略经历过一次调整,你找工作或者看项目文档时经常会碰到这些词:
- Current:最新特性版,每半年出一个大版本。适合尝鲜,不建议直接上生产。
- Active LTS:长期支持版,持续接收新功能和 bug 修复。生产环境首选。
- Maintenance LTS:维护期,只修安全漏洞,不加新功能。
截至 2026 年中:
| 通道 | 版本 | 代号 | 状态 |
|---|---|---|---|
| Current | v26.5.0 | — | 新特性试验场 |
| Active LTS | v24.18.0 | Krypton | 生产推荐 |
| Maintenance LTS | v22.23.1 | Jod | 仅安全更新 |
Warningv20(Iron)已经在 2026 年 3 月 EOL(停止维护),新项目别再用。
重点来了:从 Node.js 27 开始,发布节奏改为年度制。每年一个大版本,6 个月 Current 期后全部进入 LTS。这意味着版本号会涨得慢一些,但每个版本的 LTS 支持期可能缩短。选版本时认准官网的 LTS 标签就行,不用记太多。
安装之前需要多少 JavaScript 基础
你不用是 JavaScript 高手,但下面这些概念得熟悉:
- 变量、函数、箭头函数、
this - 数组和对象操作
- 模板字符串、解构赋值
Promise和async/await(异步是 Node.js 的灵魂)- 作用域和闭包
如果你只会写 alert('hello') 级别的代码,建议先补一补 JS 基础。Node.js 里没有 DOM,但逻辑和语法跟浏览器完全一致,会前端的人几乎零门槛切入。
一句话判断 Node.js 适不适合你的场景
- 大量 I/O(读写文件、操作数据库、网络请求)?非常适合。
- 需要高并发、长连接(聊天、推送)?非常适合。
- CPU 密集型计算(图像处理、机器学习训练)?不太适合,除非你拆给 worker 或外部服务。
- 一次性脚本、CLI 工具、构建工具?天选之子。
下一章我们直接上手,把 Node.js 装到你的电脑里。