React 项目工程化规范
React 项目工程化规范:从代码质量到团队协作的完整体系
引言
一个 React 项目从「能跑」到「好维护」,中间的鸿沟是工程化规范。规范不是束缚,而是团队协作的「共识契约」:代码风格统一、质量门禁自动、目录结构清晰、文档与代码同步。本文将从工程化的四层体系讲起,系统梳理 React 项目的目录结构设计、代码规范工具链、Git 协作流程、代码评审与持续集成,帮助团队建立可持续的工程文化。
一、工程化的四层体系
React 项目工程化可以拆解为四层:代码层(风格与质量)、协作层(分支与评审)、自动化层(CI/CD)、治理层(监控与规范迭代)。
工程化全景
flowchart TB
classDef e1 fill:#e3f2fd,stroke:#1976d2,color:#0d47a1
classDef e2 fill:#f3e5f5,stroke:#8e24aa,color:#4a148c
classDef e3 fill:#e0f7fa,stroke:#00838f,color:#004d40
A[工程化体系] --> B[代码层<br/>风格 质量 结构]
A --> C[协作层<br/>分支 评审 规范]
A --> D[自动化层<br/>CI/CD 门禁]
A --> E[治理层<br/>监控 度量 迭代]
B --> B1[Prettier + ESLint]
B --> B2[目录结构约定]
C --> C1[Git Flow 分支]
C --> C2[PR 评审清单]
D --> D1[类型/测试/构建门禁]
D --> D2[自动部署]
E --> E1[错误与性能监控]
E --> E2[规范定期复盘]
click B1 "https://prettier.io/" "Prettier 文档"
class A e1
class B e1
class C e2
class D e2
class E e2
class B1 e3
class B2 e3
class C1 e3
class C2 e3
class D1 e3
class D2 e3
class E1 e3
class E2 e3
二、目录结构设计:约定大于配置
React 项目的目录结构直接影响「新成员找到代码的速度」。好的结构应满足:按功能聚合、关注点分离、路径可预测。
推荐目录结构
flowchart TB
classDef d1 fill:#e3f2fd,stroke:#1976d2,color:#0d47a1
classDef d2 fill:#f3e5f5,stroke:#8e24aa,color:#4a148c
classDef d3 fill:#e0f7fa,stroke:#00838f,color:#004d40
A[src/] --> B[components/<br/>通用组件]
A --> C[features/<br/>业务模块]
A --> D[hooks/<br/>自定义 Hook]
A --> E[lib/<br/>工具与基础层]
A --> F[api/<br/>接口封装]
A --> G[routes/<br/>路由与页面]
A --> H[styles/<br/>全局样式]
A --> I[types/<br/>类型定义]
C --> C1[feature-a/ 组件+逻辑+样式]
C --> C2[feature-b/ 自包含模块]
click C "https://martinfowler.com/articles/modularizing-react-apps.html" "模块化 React 应用"
class A d1
class B d2
class C d2
class D d2
class E d2
class F d2
class G d2
class H d2
class I d2
class C1 d3
class C2 d3
目录设计原则
flowchart TD
classDef p1 fill:#e3f2fd,stroke:#1976d2,color:#0d47a1
classDef p2 fill:#e8f5e9,stroke:#388e3c,color:#1b5e20
A[目录设计原则] --> B[按功能聚合<br/>组件与逻辑放一起]
A --> C[路径别名<br/>短路径指向源码]
A --> D[避免深层嵌套<br/>最多 3-4 层]
A --> E[公共与业务分离<br/>components vs features]
A --> F[命名一致<br/>PascalCase 组件]
click C "https://vite.dev/config/shared-options" "路径别名配置"
class A p1
class B p2
class C p2
class D p2
class E p2
class F p2
三、代码规范工具链
代码规范的本质是「把争议交给机器」:格式化交给 Prettier,质量检查交给 ESLint,类型交给 TypeScript——开发者专注逻辑。
规范工具链
flowchart LR
classDef t1 fill:#e3f2fd,stroke:#1976d2,color:#0d47a1
classDef t2 fill:#f3e5f5,stroke:#8e24aa,color:#4a148c
classDef t3 fill:#e0f7fa,stroke:#00838f,color:#004d40
A[代码提交] --> B[Prettier 格式化<br/>风格统一]
A --> C[ESLint 检查<br/>质量规则]
A --> D[TypeScript<br/>类型安全]
B --> E[提交前 pre-commit]
C --> E
D --> E
E --> F[代码入库]
click C "https://eslint.org/docs/latest/use/getting-started" "ESLint 文档"
class A t1
class B t1
class C t1
class D t1
class E t2
class F t3
规范配置建议
flowchart TD
classDef s1 fill:#e3f2fd,stroke:#1976d2,color:#0d47a1
classDef s2 fill:#f3e5f5,stroke:#8e24aa,color:#4a148c
classDef s3 fill:#e0f7fa,stroke:#00838f,color:#004d40
A[规范配置] --> B[ESLint 规则集]
B --> B1[eslint-plugin-react<br/>组件规则]
B --> B2[react-hooks<br/>Hooks 规则]
B --> B3[jsx-a11y<br/>无障碍规则]
A --> C[Prettier 配置]
C --> C1[semi 分号]
C --> C2[printWidth 行宽]
C --> C3[singleQuote 引号]
A --> D[Husky 钩子]
D --> D1[pre-commit 格式检查]
D --> D2[pre-push 质量门禁]
click B2 "https://www.npmjs.com/package/eslint-plugin-react-hooks" "react-hooks 插件"
class A s1
class B s1
class B1 s3
class B2 s3
class B3 s3
class C s1
class C1 s3
class C2 s3
class C3 s3
class D s2
class D1 s3
class D2 s3
四、Git 协作流程:分支与提交规范
Git 流程决定团队协作的节奏。常见方案有 Git Flow(多分支严格)与 Trunk-based(主分支短命分支)。React 团队规模中等时,「主分支 + 特性分支 + PR 评审」是主流。
分支协作模型
flowchart TB
classDef g1 fill:#e3f2fd,stroke:#1976d2,color:#0d47a1
classDef g2 fill:#f3e5f5,stroke:#8e24aa,color:#4a148c
classDef g3 fill:#e0f7fa,stroke:#00838f,color:#004d40
A[main 主分支<br/>始终可发布] --> B[feature/a<br/>功能开发]
A --> C[feature/b<br/>功能开发]
A --> D[hotfix<br/>紧急修复]
B --> E[PR 评审合并]
C --> E
D --> E
E --> F[发布版本标签]
click E "https://docs.github.com/zh/pull-requests" "PR 文档"
class A g1
class B g2
class C g2
class D g2
class E g3
class F g3
提交信息规范(Conventional Commits)
flowchart LR
classDef m1 fill:#e3f2fd,stroke:#1976d2,color:#0d47a1
classDef m2 fill:#f3e5f5,stroke:#8e24aa,color:#4a148c
classDef m3 fill:#e0f7fa,stroke:#00838f,color:#004d40
A["feat: 新增文章列表筛选"] --> B[类型 feat 功能]
C["fix: 修复移动端滚动卡顿"] --> D[类型 fix 修复]
E["docs: 补充部署文档"] --> F[类型 docs 文档]
G["refactor: 重构缓存逻辑"] --> H[类型 refactor 重构]
I["perf: 优化首屏渲染"] --> J[类型 perf 性能]
click A "https://www.conventionalcommits.org/zh-hans/" "提交规范文档"
class A m1
class B m3
class C m1
class D m3
class E m2
class F m3
class G m2
class H m3
class I m2
class J m3
规范收益:提交信息可读 → 变更历史可追溯 → 版本发布可自动生成 changelog。
五、代码评审:质量与传承的仪式
代码评审(PR Review)是团队知识的「汇流点」:评审者把关质量,被评审者传承经验。好的评审依赖清单而非感觉。
PR 评审清单
flowchart TD
classDef r1 fill:#e3f2fd,stroke:#1976d2,color:#0d47a1
classDef r2 fill:#f3e5f5,stroke:#8e24aa,color:#4a148c
classDef r3 fill:#e0f7fa,stroke:#00838f,color:#004d40
A[评审清单] --> B[功能正确性<br/>边界与异常]
A --> C[类型与规范<br/>TS 与 lint]
A --> D[性能影响<br/>渲染与请求]
A --> E[无障碍<br/>语义与键盘]
A --> F[可维护性<br/>命名与结构]
B --> G[测试覆盖<br/>关键路径有测试]
click B "https://google.github.io/eng-practices/review/" "Google 评审指南"
class A r1
class B r1
class C r2
class D r2
class E r2
class F r2
class G r3
评审的高效实践
- PR 尽量小(单次变更一个关注点);
- 自动检查先行(lint/test 通过才进人工评审);
- 评审意见「对事不对人」,附建议代码;
- 约定评审时限(如 24 小时内响应);
- 文档与代码同步评审。
六、持续集成:把门禁交给机器
CI(持续集成)把「质量门禁」自动化:每次提交自动执行类型检查、测试、构建,不合格即拦截。这是工程化的「地基」。
CI 流水线
flowchart TB
classDef c1 fill:#e3f2fd,stroke:#1976d2,color:#0d47a1
classDef c2 fill:#f3e5f5,stroke:#8e24aa,color:#4a148c
classDef c3 fill:#e0f7fa,stroke:#00838f,color:#004d40
A[代码推送到分支] --> B[安装依赖<br/>缓存加速]
B --> C[类型检查 typecheck]
C --> D[单元测试 test]
D --> E[代码检查 lint]
E --> F{全部通过}
F -->|是| G[构建产物]
G --> H{是否主分支}
H -->|是| I[部署预览/发布]
H -->|否| J[生成预览链接]
F -->|否| K[标注失败 阻止合并]
click G "https://github.com/features/actions" "GitHub Actions"
class A c1
class B c1
class C c2
class D c2
class E c2
class F c2
class G c3
class H c2
class I c3
class J c3
class K c3
七、文档与知识沉淀
代码会演进,文档必须跟上。React 项目的文档体系应覆盖:README(快速上手)、架构决策记录(ADR)、组件文档(Storybook)、操作手册(部署/排障)。
文档体系
flowchart LR
classDef w1 fill:#e3f2fd,stroke:#1976d2,color:#0d47a1
classDef w2 fill:#f3e5f5,stroke:#8e24aa,color:#4a148c
classDef w3 fill:#e0f7fa,stroke:#00838f,color:#004d40
A[文档体系] --> B[README<br/>环境搭建与启动]
A --> C[ARCHITECTURE<br/>架构与决策]
A --> D[Storybook<br/>组件文档]
A --> E[Runbook<br/>部署与排障]
click D "https://storybook.js.org/" "Storybook 文档"
class A w1
class B w1
class C w2
class D w2
class E w2
class F w3
八、总结
React 工程化是一套「共识 → 工具 → 文化」的体系:
- 代码层:Prettier + ESLint + TS 三件套,风格交给机器;
- 结构层:按功能聚合的目录,路径可预测;
- 协作层:特性分支 + PR 评审清单 + 提交规范;
- 自动化层:CI 质量门禁 + 自动部署;
- 治理层:监控复盘 + 文档沉淀 + 规范迭代。
实践建议:工程化要「先立后破」——先定最小可执行的规范(format + lint + typecheck 进 CI),再逐步扩展;规范的价值在于「所有人遵守同一套规则」,而不在于规则本身有多完美。下一篇我们将深入 TanStack Start 全栈框架与 SSR 的完整实战。
