1. 项目背景与核心价值
十年前我刚入行前端时,团队协作就像一场没有指挥的交响乐——设计稿版本混乱、接口字段随意变更、测试环境各自为政。最夸张的一次,因为本地分支命名不规范,导致线上代码被意外覆盖,直接造成百万级损失。正是这些惨痛教训,促使我沉淀出这套覆盖全流程的研发规范体系。
这套手册不是学院派的理想化方案,而是经过30+中大型项目验证的实战指南。它解决了前端团队最头疼的三大问题:
- 需求阶段:如何避免"设计师天马行空,产品经理朝令夕改"的困局
- 开发阶段:怎样建立可追溯的代码演进记录,而不是在git历史里考古
- 发布阶段:从灰度策略到回滚机制,如何把线上事故扼杀在萌芽期
2. 需求管理规范
2.1 需求文档标准化模板
所有需求必须包含以下核心字段(示例为电商项目):
## 需求背景 - 解决什么问题:购物车结算页流失率高达35% - 业务指标:提升结算转化率至50% ## 交互规则 - 优惠券选择器: - 默认展开前三张可用券 - 剩余券种需要点击"查看更多"展开 - 选中状态用金色边框+对勾icon ## 数据约定 - 接口字段: coupons: { id: string title: string discount: number isAvailable: boolean }[]关键技巧:要求产品经理在文档中标注「变更风险等级」。例如修改按钮颜色是P3级(低风险),而调整结算流程属于P0级(必须全团队同步)
2.2 设计稿审查清单
我们团队使用的Sketch检查表:
- 图层命名是否遵循
模块/功能_状态格式(如cart/coupon_selected) - 所有间距是否为4px的整数倍
- 文字样式是否使用共享样式库
- 导出切图是否带@2x/@3x后缀
实测案例:某次评审发现设计师遗漏了优惠券"已过期"状态,避免开发后期返工。
3. 开发阶段管控
3.1 Git操作黄金法则
- 分支命名:
feat/功能名_开发者缩写(如feat/coupon-selector_zhangsan) - 提交信息:采用
<type>(<scope>): <subject>格式git commit -m "feat(cart): add coupon selector component - implement expand/collapse logic - add accessibility labels"
血泪教训:曾因同事随意提交"update code"导致排查线上bug多花3小时
3.2 代码质量三板斧
ESLint配置:对React项目特别增加hooks依赖检查
// .eslintrc.js rules: { 'react-hooks/exhaustive-deps': ['error', { additionalHooks: '(useMyCustomHook|useAnotherHook)' }] }组件开发原则:
- 单个文件不超过300行
- Props类型用TypeScript严格定义
- 复杂逻辑必须写单元测试
性能红线指标:
- 首屏加载≤1.5s
- 交互响应≤200ms
- 打包后单chunk≤200KB
4. 发布流程控制
4.1 灰度发布策略
我们的AB测试方案配置示例:
// src/utils/featureToggle.js export const isFeatureEnabled = (featureName) => { const userGroup = getUserGroup() // 根据用户ID哈希分组 return { 'new_checkout_ui': userGroup < 0.2, // 20%流量灰度 'coupon_animation': localStorage.getItem('forceFeature') === 'true' }[featureName] }4.2 监控报警配置
必须部署的Sentry报警规则:
- JS错误率突增≥50%
- 接口500错误持续5分钟
- 关键路径PV下跌30%
5. 经典问题排查实录
5.1 样式污染事件
现象:优惠券选择器在Safari显示错位根因:某同事写了全局样式.card { margin: 0 }解决方案:
- 强制使用CSS Modules
- 增加PostCSS检查:
// postcss.config.js module.exports = { plugins: [ require('stylelint')({ rules: { 'selector-max-universal': 0 } }) ] }
5.2 内存泄漏排查
现象:结算页停留时间越长越卡顿排查步骤:
- Chrome Performance面板录制
- 发现未卸载的WebSocket监听
- 增加useEffect清理函数:
useEffect(() => { const ws = new WebSocket(url) return () => ws.close() // 关键! }, [url])
这套规范最宝贵的不是文档本身,而是背后200+小时的故障复盘记录。建议团队每季度做一次"规范适应性评审",删除过时的条款,补充新的最佳实践。