36 lines
1.7 KiB
Markdown
36 lines
1.7 KiB
Markdown
# 贡献与工程约束
|
||
|
||
## 本地验证
|
||
|
||
项目要求 Node.js `20.19` 至 `24.x`。后端与 Web 前端分别维护锁文件,依赖变更后必须同步提交对应的 `package-lock.json`。
|
||
|
||
```bash
|
||
cd backend
|
||
npm ci
|
||
npm test
|
||
npm audit --omit=dev
|
||
|
||
cd ../frontend
|
||
npm ci
|
||
npm run build
|
||
npm audit
|
||
```
|
||
|
||
开发 Web 前端时分别运行后端 `npm run dev` 与前端 `npm run dev`。生产环境只服务 `frontend/dist/`,不要手工修改构建产物或给资源 URL 追加版本号。
|
||
|
||
## 不可破坏的约束
|
||
|
||
1. `app.use(expressErrorHandler)` 必须保持为最后一个 `app.use`;CI 的架构测试会检查这一点。
|
||
2. Express 4 使用 `express-async-errors` 捕获异步路由拒绝;该补丁必须在注册任何路由前加载。
|
||
3. 限流器、下载安全计数和 OSS 用量缓存仍是进程内状态,PM2 必须保持单实例 `fork` 模式。扩容前先迁移到共享状态存储。
|
||
4. `npm ci` 依赖严格同步的 lock 文件;禁止在部署脚本中删除 `package-lock.json`。
|
||
5. Express 中间件顺序是安全边界:requestId/安全头/CORS/HTTPS/静态资源/API 限流/请求体/CSRF,不得无验证调整。
|
||
6. 桌面安装包目录 `frontend/downloads/` 是运行时发布目录,更新前必须备份且不得放进 `frontend/dist/` 的清理生命周期。
|
||
|
||
## 改动原则
|
||
|
||
- 路由继续按业务域渐进迁移,每次只迁移一个域并运行全部测试。
|
||
- 新抽取的纯函数必须直接测试生产模块;禁止在测试文件复制实现。
|
||
- 安全或配额核心逻辑应做一次变异验证:临时改坏生产实现,确认对应测试失败后立即还原。
|
||
- 日志使用 `req.log` 或公共 logger,禁止记录密码、令牌、Cookie、Access Key 或完整授权头。
|