[ PROMPT_NODE_25008 ]
nodejs-best-practices
[ SKILL_DOCUMENTATION ]
# Node.js 最佳实践
> 2025 年 Node.js 开发的原则与决策制定。
> **学会思考,而不是死记硬背代码模式。**
---
## ⚠️ 如何使用此技能
此技能教授的是**决策原则**,而非固定的代码复制。
- 当不明确时,询问用户的偏好
- 根据上下文(CONTEXT)选择框架/模式
- 不要每次都默认使用相同的解决方案
---
## 1. 框架选择 (2025)
### 决策树
你在构建什么?
│
├── Edge/Serverless (Cloudflare, Vercel)
│ └── Hono (零依赖,极速冷启动)
│
├── 高性能 API
│ └── Fastify (比 Express 快 2-3 倍)
│
├── 企业级/团队熟悉度
│ └── NestJS (结构化,依赖注入,装饰器)
│
├── 遗留系统/稳定/生态最广
│ └── Express (成熟,中间件最多)
│
└── 全栈前端集成
└── Next.js API Routes 或 tRPC
### 对比原则
| 因素 | Hono | Fastify | Express |
|--------|------|---------|---------|
| **最佳场景** | Edge, serverless | 性能 | 遗留系统, 学习 |
| **冷启动** | 最快 | 快 | 中等 |
| **生态** | 增长中 | 好 | 最大 |
| **TypeScript** | 原生 | 优秀 | 好 |
| **学习曲线** | 低 | 中 | 低 |
### 决策提问:
1. 部署目标是什么?
2. 冷启动时间是否关键?
3. 团队是否有现有经验?
4. 是否有需要维护的遗留代码?
---
## 2. 运行时考量 (2025)
### 原生 TypeScript
Node.js 22+: --experimental-strip-types
├── 直接运行 .ts 文件
├── 简单项目无需构建步骤
└── 适用场景:脚本,简单 API
### 模块系统决策
ESM (import/export)
├── 现代标准
├── 更好的 Tree-shaking
├── 异步模块加载
└── 适用场景:新项目
CommonJS (require)
├── 遗留兼容性
├── 支持更多 npm 包
└── 适用场景:现有代码库,某些边缘情况
### 运行时选择
| 运行时 | 最佳场景 |
|---------|----------|
| **Node.js** | 通用,生态最广 |
| **Bun** | 性能,内置打包器 |
| **Deno** | 安全优先,内置 TypeScript |
---
## 3. 架构原则
### 分层结构概念
请求流:
│
├── 控制器/路由层
│ ├── 处理 HTTP 特定逻辑
│ ├── 边界输入验证
│ └── 调用服务层
│
├── 服务层
│ ├── 业务逻辑
│ ├── 与框架无关
│ └── 调用仓库层
│
└── 仓库层
├── 仅数据访问
├── 数据库查询