Skip to content

Node.js 入门 ​

Node.js 是基于 Chrome V8 引擎的 JavaScript 运行时,让 JavaScript 脱离浏览器在服务端运行。它采用事件驱动、非阻塞 I/O 模型,轻量且高效,特别适合构建高并发的网络应用。

作者:yanshaodong

为什么选择 Node.js ​

  • 统一语言栈:前后端均使用 JavaScript/TypeScript,降低上下文切换成本。
  • 高性能:基于 V8 引擎,事件循环 + 非阻塞 I/O,单机即可支撑高并发。
  • 生态丰富:npm 是全球最大的开源包仓库,几乎涵盖所有工程需求。
  • 轻量敏捷:适合微服务、Serverless、CLI 工具、BFF 层等多种场景。

运行时原理 ​

Node.js 并不是"多线程处理请求"的模型,而是:

  1. V8 引擎:执行 JavaScript 代码(与 Chrome 同源)。
  2. libuv:提供跨平台的事件循环、异步 I/O、线程池。
  3. 事件循环(Event Loop):不断轮询事件队列,将异步 I/O 完成后的回调推入调用栈。
  4. 单线程执行: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 版本。

包管理器 ​

工具特点
npmNode 自带,生态最全,默认锁文件 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