主题
Node.js 入门
Node.js 是基于 Chrome V8 引擎的 JavaScript 运行时,让 JavaScript 脱离浏览器在服务端运行。它采用事件驱动、非阻塞 I/O 模型,轻量且高效,特别适合构建高并发的网络应用。
作者:yanshaodong
为什么选择 Node.js
- 统一语言栈:前后端均使用 JavaScript/TypeScript,降低上下文切换成本。
- 高性能:基于 V8 引擎,事件循环 + 非阻塞 I/O,单机即可支撑高并发。
- 生态丰富:npm 是全球最大的开源包仓库,几乎涵盖所有工程需求。
- 轻量敏捷:适合微服务、Serverless、CLI 工具、BFF 层等多种场景。
运行时原理
Node.js 并不是"多线程处理请求"的模型,而是:
- V8 引擎:执行 JavaScript 代码(与 Chrome 同源)。
- libuv:提供跨平台的事件循环、异步 I/O、线程池。
- 事件循环(Event Loop):不断轮询事件队列,将异步 I/O 完成后的回调推入调用栈。
- 单线程执行:JavaScript 主逻辑在单线程运行,耗时的 I/O 操作(文件、网络)交给 libuv 线程池处理,完成后通过回调/ Promise 回到主线程。
javascript
console.log('1') // 同步,立即执行
setTimeout(() => console.log('2'), 0) // 宏任务,下一轮事件循环
Promise.resolve().then(() => console.log('3')) // 微任务,当前轮结束前
console.log('4') // 同步,立即执行
// 输出顺序:1, 4, 3, 2版本管理(nvm)
不同项目可能依赖不同 Node 版本,推荐使用 nvm(Windows 用 nvm-windows)管理。
bash
nvm install 20 # 安装 Node 20 LTS
nvm use 20 # 切换到 Node 20
nvm ls # 查看已安装版本
node -v # 查看当前版本建议生产环境使用 LTS(长期支持) 版本(如 20.x、22.x),而非 Current 版本。
包管理器
| 工具 | 特点 |
|---|---|
| npm | Node 自带,生态最全,默认锁文件 package-lock.json |
| yarn | 经典 yarn.lock,早期以速度快著称 |
| pnpm | 硬链接 + 内容寻址存储,节省磁盘、安装快、严格依赖隔离 |
bash
# npm
npm init -y
npm install express
npm install -D typescript
# pnpm(推荐)
pnpm init
pnpm add express
pnpm add -D typescript第一个程序
javascript
// app.js
const http = require('http')
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' })
res.end('Hello Node.js!')
})
server.listen(3000, () => {
console.log('服务器运行在 http://localhost:3000')
})运行:
bash
node app.js适用场景
- API 服务 / BFF:为前端聚合多后端数据。
- 实时应用:WebSocket 聊天、协作编辑、推送。
- CLI 工具:跨平台脚本、构建工具(Vite、Webpack 基于 Node)。
- Serverless / 边缘计算:冷启动快、资源占用低。
- 微服务:配合 Docker 易于水平扩展。
不适用场景
- CPU 密集型计算(如大规模图像处理、复杂加密)—— 会阻塞事件循环,应使用
worker_threads或将计算下沉到独立服务。 - 强事务一致性要求的金融核心系统(Node 生态的 ORM/事务支持相对 Java 成熟体系仍偏轻量)。
作者:yanshaodong