前端跨团队协作规范
🤝 前端跨团队协作规范(实战版)
🎯 一、协作的核心原则
黄金法则:
"代码是给人看的,顺便让机器运行"
- 新人3天能上手
- 老鸟5分钟能看懂任何模块
- 团队内任意两人可互相接手代码
📁 二、目录结构规范(必须统一)
React项目标准结构
src/
├── 📁 api/ # 所有API接口定义
│ ├── user.js # 用户相关API
│ ├── product.js # 产品相关API
│ └── index.js # 统一导出
├── 📁 assets/ # 静态资源
│ ├── images/ # 图片
│ ├── styles/ # 全局样式
│ └── fonts/ # 字体
├── 📁 components/ # 公共组件
│ ├── common/ # 通用组件(按钮、输入框)
│ ├── business/ # 业务组件
│ └── layout/ # 布局组件
├── 📁 hooks/ # 自定义Hooks
│ ├── useAuth.js # 权限相关Hook
│ └── useFetch.js # 请求Hook
├── 📁 pages/ # 页面组件
│ ├── Home/
│ │ ├── index.jsx # 主组件
│ │ ├── components/ # 页面私有组件
│ │ └── styles.css # 页面样式
│ └── User/
├── 📁 store/ # 状态管理
│ ├── modules/ # 模块store
│ └── index.js # store配置
├── 📁 utils/ # 工具函数
│ ├── request.js # 请求封装
│ └── validate.js # 验证工具
├── App.jsx # 根组件
└── main.jsx # 入口文件
Vue项目标准结构
src/
├── 📁 api/ # API接口
├── 📁 assets/ # 静态资源
├── 📁 components/ # 组件
│ ├── base/ # 基础组件
│ └── modules/ # 模块组件
├── 📁 composables/ # Composition API
├── 📁 views/ # 页面视图
├── 📁 router/ # 路由
├── 📁 store/ # Pinia状态
├── 📁 utils/ # 工具函数
└── App.vue # 根组件
📝 三、代码编写规范(简单记住)
1. 命名规范(必须遵守)
// ✅ 正确的命名
const userList = []; // 变量:小驼峰
function getUserInfo() {} // 函数:动词+名词
const MAX_COUNT = 100; // 常量:全大写+下划线
class UserService {} // 类:大驼峰
const API_BASE = '/api'; // 全局配置:全大写
// ❌ 错误的命名
const userlist = []; // 没有下划线
const GetUser = () => {} // 函数用大驼峰
const maxCount = 100; // 常量用小驼峰
2. 组件规范
// 组件文件模板(复制使用)
import React from 'react';
import PropTypes from 'prop-types';
import styles from './UserCard.module.css';
/**
* 用户卡片组件
* @param {Object} props
* @param {User} props.user - 用户信息
* @param {boolean} props.isActive - 是否激活
* @param {Function} props.onClick - 点击回调
* @example
* <UserCard
* user={userData}
* isActive={true}
* onClick={handleClick}
* />
*/
const UserCard = ({ user, isActive = false, onClick }) => {
// 1. 状态定义
const [loading, setLoading] = useState(false);
// 2. 副作用
useEffect(() => {
// 初始化逻辑
}, []);
// 3. 事件处理
const handleClick = () => {
onClick?.(user);
};
// 4. 渲染
return (
<div
className={`${styles.card} ${isActive ? styles.active : ''}`}
onClick={handleClick}
>
<img src={user.avatar} alt={user.name} />
<span>{user.name}</span>
</div>
);
};
// 5. Props类型检查
UserCard.propTypes = {
user: PropTypes.shape({
id: PropTypes.number.isRequired,
name: PropTypes.string.isRequired,
avatar: PropTypes.string,
}).isRequired,
isActive: PropTypes.bool,
onClick: PropTypes.func,
};
// 6. 默认Props
UserCard.defaultProps = {
isActive: false,
};
export default React.memo(UserCard);
3. Git提交规范(必须!)
# 提交格式:type(scope): subject
# type类型:
# feat: 新功能
# fix: 修复bug
# docs: 文档更新
# style: 代码格式(不影响功能)
# refactor: 重构
# test: 测试
# chore: 构建/工具变更
# ✅ 好的提交信息
git commit -m "feat(user): 新增用户登录功能"
git commit -m "fix(auth): 修复token过期问题"
git commit -m "docs(readme): 更新项目启动说明"
# ❌ 坏的提交信息
git commit -m "更新代码"
git commit -m "修复bug"
git commit -m "."
🔧 四、开发流程规范
1. 分支管理策略
# 主分支
main # 生产环境代码(保护分支)
develop # 开发分支(保护分支)
# 功能分支(从develop拉取)
feature/user-login # 新功能开发
bugfix/login-error # bug修复
hotfix/payment-issue # 紧急修复
# 发布分支
release/v1.2.0 # 版本发布
2. Code Review清单
## 代码审查检查项
### 功能性 ✅
- [ ] 功能是否完成需求?
- [ ] 是否有明显的bug?
- [ ] 边界情况处理了吗?
### 代码质量 ✅
- [ ] 命名规范吗?(变量、函数、文件)
- [ ] 有重复代码吗?
- [ ] 函数是否太长?(超过50行要拆分)
- [ ] 注释清晰吗?(特别是复杂逻辑)
### 性能 ✅
- [ ] 有内存泄漏风险吗?(定时器、事件监听)
- [ ] 组件渲染优化了吗?(React.memo、useMemo)
- [ ] 请求有缓存吗?
- [ ] 大图片压缩了吗?
### 安全性 ✅
- [ ] 有XSS风险吗?
- [ ] 敏感信息暴露了吗?
- [ ] 权限检查了吗?
### 兼容性 ✅
- [ ] 支持目标浏览器吗?
- [ ] 移动端适配了吗?
3. PR模板(复制使用)
## 变更描述
[简要描述这次PR做了什么]
## 变更类型
- [ ] Bug修复
- [ ] 新功能
- [ ] 代码重构
- [ ] 文档更新
- [ ] 其他
## 测试情况
- [ ] 单元测试通过
- [ ] 集成测试通过
- [ ] 手动测试通过(描述测试步骤)
## 截图/录屏(如有UI变更)
[上传截图]
## 关联Issue
Closes #123
## 自查清单
- [ ] 代码符合团队规范
- [ ] 没有console.log调试代码
- [ ] 已处理所有TODO注释
- [ ] 文档已更新(如有必要)
🚀 五、API协作规范
1. API接口定义模板
// api/user.js
import request from '@/utils/request';
/**
* 用户服务API
*/
export const userApi = {
/**
* 用户登录
* @param {Object} params
* @param {string} params.username - 用户名
* @param {string} params.password - 密码
* @returns {Promise<User>}
*/
login: (params) => request.post('/api/user/login', params),
/**
* 获取用户信息
* @param {number} userId - 用户ID
* @returns {Promise<UserInfo>}
*/
getUserInfo: (userId) => request.get(`/api/user/${userId}`),
/**
* 更新用户信息
* @param {number} userId - 用户ID
* @param {Object} userInfo - 用户信息
* @returns {Promise<void>}
*/
updateUser: (userId, userInfo) =>
request.put(`/api/user/${userId}`, userInfo),
};
// 类型定义(配合TypeScript更好)
/**
* @typedef {Object} User
* @property {number} id
* @property {string} name
* @property {string} avatar
*/
2. 请求封装统一处理
// utils/request.js
import axios from 'axios';
// 创建实例
const request = axios.create({
baseURL: process.env.REACT_APP_API_URL,
timeout: 10000,
});
// 请求拦截器
request.interceptors.request.use(
(config) => {
// 添加token
const token = localStorage.getItem('token');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
(error) => Promise.reject(error)
);
// 响应拦截器
request.interceptors.response.use(
(response) => {
// 统一处理响应格式
return response.data;
},
(error) => {
// 统一错误处理
if (error.response?.status === 401) {
// token过期,跳转登录
window.location.href = '/login';
}
// 返回统一格式的错误
return Promise.reject({
code: error.response?.status || 500,
message: error.response?.data?.message || '网络错误',
});
}
);
export default request;
🎨 六、UI/设计协作规范
1. 设计稿转代码规范
// 尺寸转换:设计稿750px -> 实际用rem
// 设置:1rem = 100px(750设计稿)
html {
font-size: calc(100vw / 7.5); /* 750设计稿适配 */
}
// 使用:设计稿20px -> 0.2rem
.button {
width: 0.2rem; /* 实际20px */
height: 0.2rem;
}
2. 颜色管理
/* 颜色变量统一管理 */
:root {
/* 主色 */
--primary-color: #1890ff;
--primary-hover: #40a9ff;
/* 文本色 */
--text-primary: #333;
--text-secondary: #666;
/* 背景色 */
--bg-white: #fff;
--bg-gray: #f5f5f5;
/* 状态色 */
--success: #52c41a;
--warning: #faad14;
--error: #f5222d;
}
3. 组件库使用规范
## 组件使用优先级
1. 🥇 团队组件库 (@company/ui) # 优先使用
2. 🥈 Ant Design / Element UI # 基础组件
3. 🥉 自定义组件 # 特殊需求时
## 禁止行为
- ❌ 直接修改第三方组件样式
- ❌ 复制粘贴组件库代码
- ❌ 一个页面混用多个UI库
📊 七、文档规范
1. README必须包含
# 项目名称
## 🚀 快速开始
```bash
# 安装依赖
npm install
# 启动开发
npm start
# 构建
npm run build
📁 项目结构
[说明目录结构]
🔧 技术栈
- React 18
- TypeScript
- Ant Design
- ...
👥 团队成员
- 张三 - 前端负责人
- 李四 - 后端负责人
📞 沟通方式
- 前端群:钉钉群「xxx」
- 文档:Confluence「项目文档」
- 会议:每周三 10:00 站会
### **2. 组件文档示例**
```markdown
# UserCard 用户卡片组件
## 何时使用
- 显示用户基本信息
- 用户列表项
## 基本用法
```jsx
import UserCard from '@/components/UserCard';
<UserCard
user={userData}
isActive={true}
onClick={handleClick}
/>
API
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| user | 用户信息 | Object | 必填 |
| isActive | 是否激活 | boolean | false |
| onClick | 点击回调 | function | - |
设计稿
[链接到Figma设计稿]
---
## 🧪 **八、测试规范**
### **1. 测试文件结构**
src/
├── components/
│ └── UserCard/
│ ├── index.jsx # 组件
│ └── index.test.js # 测试文件
└── utils/
├── format.js
└── format.test.js # 对应测试
### **2. 测试优先级**
```javascript
// 1. 工具函数必须测试(100%覆盖)
// format.test.js
describe('formatDate', () => {
it('应该正确格式化日期', () => {
expect(formatDate('2023-01-01')).toBe('2023年1月1日');
});
});
// 2. 公共组件必须测试
// UserCard.test.js
describe('UserCard', () => {
it('应该渲染用户信息', () => {
const user = { name: '张三', avatar: 'url' };
render(<UserCard user={user} />);
expect(screen.getByText('张三')).toBeInTheDocument();
});
});
// 3. 业务逻辑复杂处要测试
// 4. Bug修复后要加测试防止回归
🚨 九、常见问题处理流程
1. 遇到问题怎么办?
## 问题解决流程
1. **自查**(30分钟)
- 检查控制台错误
- 检查网络请求
- 检查本地数据
2. **问同事**(30分钟)
- 截图+错误信息
- 描述复现步骤
- 说明已尝试的方法
3. **提Issue**(如果还是解决不了)
- 标题:[模块]问题描述
- 内容:问题+环境+截图+复现步骤
- 标签:bug/help/question
2. 代码冲突解决流程
# 1. 先拉取最新代码
git fetch origin
git checkout develop
git pull origin develop
# 2. 回到自己分支
git checkout feature/my-feature
git merge develop
# 3. 解决冲突(优先保留同事的代码)
# 有疑问直接找同事沟通!
# 4. 提交
git add .
git commit -m "fix: 解决合并冲突"
🏆 十、新人上手清单
第1天:环境搭建
- [ ] 安装 Node.js (v16+)
- [ ] 安装 Git
- [ ] 配置 SSH Key
- [ ] 克隆项目代码
- [ ] 安装依赖:npm install
- [ ] 启动项目:npm start
- [ ] 访问本地:http://localhost:3000
第1周:熟悉项目
- [ ] 阅读 README.md
- [ ] 查看项目结构
- [ ] 运行所有测试:npm test
- [ ] 了解 Git 分支策略
- [ ] 熟悉代码规范文档
- [ ] 完成第一个简单任务(如修改文案)
第1月:融入团队
- [ ] 参加每日站会
- [ ] 参与 Code Review
- [ ] 独立完成一个功能模块
- [ ] 熟悉部署流程
- [ ] 了解监控告警系统
📋 十一、协作检查清单
代码提交前检查
# 运行检查脚本
npm run lint # 代码规范检查
npm run test # 运行测试
npm run build # 确保能构建成功
# 手动检查
- [ ] 控制台没有 warning
- [ ] 没有 console.log 调试代码
- [ ] 注释清晰
- [ ] 函数不超过50行
- [ ] 组件 props 有默认值
- [ ] 错误处理完善
功能完成后检查
- [ ] 功能测试通过
- [ ] 移动端适配
- [ ] 浏览器兼容
- [ ] 性能测试(内存、加载速度)
- [ ] 文档更新
- [ ] 告知相关同事
🎯 记住这几点就够了
协作三要:
- 要沟通 - 提前说,主动问
- 要规范 - 按规矩来,不搞特殊
- 要文档 - 写清楚,留记录
协作三不要:
- 不要沉默 - 有问题立刻说
- 不要独狼 - 代码要 review
- 不要拖延 - 今日事今日毕
最重要的一句话:
"写代码时想想:如果同事明天要改这段代码,他能看懂吗?"
🚀 立即行动清单
- 今天:把这份规范发给团队所有人
- 本周:检查一个项目是否符合规范
- 本月:建立团队的 Code Review 文化
- 永远:写代码时想着下一个维护的人
好的协作不是管出来的,是习惯出来的。从今天开始培养好习惯!

浙公网安备 33010602011771号