一、这个技术是什么?
JavaScript 最初主要运行在浏览器里,但后端程序还需要读文件、监听端口、访问进程和操作系统资源。
Node.js 提供了一个让 JavaScript 在浏览器之外运行的环境,并把网络、文件、进程等能力暴露给程序。
二、没有它之前发生了什么?
JavaScript 主要只能在浏览器中运行
↓
服务端需要使用其他语言
↓
前后端语言和数据模型容易分裂
↓
JavaScript 引擎被扩展为服务端运行时
↓
Node.js 出现
三、核心概念
1. V8
V8 负责解析和执行 JavaScript。它是 Node.js 的 JavaScript 引擎,但不是完整的 Node.js。
2. Node API
Node API 提供文件、网络、进程、加密等服务端能力。
3. libuv
libuv 负责事件循环和许多异步 I/O 的底层协调。
4. Module System
Node.js 支持 CommonJS 和 ESM,两者影响模块导入、导出和运行配置。
5. Runtime Boundary
Node.js 程序可以访问服务器资源,因此密钥、文件路径和用户输入必须受到保护。
四、运行流程
五、面试复习
一句话回答
Node.js 是运行 JavaScript 的服务端运行时,由 V8、Node API 和事件循环等部分组成,可以访问网络、文件和进程能力。
高频追问
- Node.js 和 V8 是什么关系?
- Node.js 为什么适合 I/O 密集型服务?
- Node.js 是单线程吗?
- CommonJS 和 ESM 有什么区别?
容易答错
不要说 Node.js 等于 V8,也不要说 Node.js 完全不能使用多线程。更准确的说法是:主 JavaScript 执行通常由单线程事件循环驱动,但底层可以使用线程池和 Worker。
六、项目展示
在知识库平台中,Next.js 服务器使用 Node.js 读取 Markdown 文件、解析 Frontmatter,并在构建时生成静态页面。这就是 Node.js 运行时能力的一个实际应用。