如何用 Codex 把散乱页面整理成组件系统
很多前端项目一开始不是没有组件,而是组件越来越像“临时垃圾桶”:按钮复制一份、卡片复制一份、筛选栏复制一份,页面赶工上线后,每个页面都有自己的写法。等到要统一样式、接入新功能、做移动端适配时,才发现改一个按钮要搜十几个文件,改一张卡片会牵出一堆视觉和逻辑问题。
发布时间 2026/07/04

很多前端项目一开始不是没有组件,而是组件越来越像“临时垃圾桶”:按钮复制一份、卡片复制一份、筛选栏复制一份,页面赶工上线后,每个页面都有自己的写法。等到要统一样式、接入新功能、做移动端适配时,才发现改一个按钮要搜十几个文件,改一张卡片会牵出一堆视觉和逻辑问题。
这类问题不适合只让 Codex “帮我重构一下”。这样的指令太粗,结果通常会变成大范围改动、组件抽象过度、页面视觉被改坏,甚至业务逻辑被顺手动掉。更稳的做法是:把任务拆成页面盘点、重复模式识别、组件边界设计、低风险迁移、验收检查五个阶段,让 Codex 像执行一次工程整理任务,而不是自由发挥。
核心判断:把散乱页面整理成组件系统,不是重新设计 UI,而是在尽量不改变现有视觉和业务逻辑的前提下,把重复结构、重复样式和重复交互抽出来,形成可复用、可测试、可继续扩展的组件层。
一、什么时候应该让 Codex 做组件系统整理
不是所有项目都需要马上组件化。如果页面还在大幅探索阶段,过早抽象会让开发变慢。但如果项目已经有一批相似页面,并且开始出现维护成本,Codex 就很适合介入做第一轮整理。
-
同一种 UI 在 3 个以上页面重复出现:例如按钮、卡片、筛选栏、空状态、列表项、弹窗、表单行。
-
Tailwind / CSS 类名大量复制:同样的间距、圆角、阴影、边框、字号在多个页面重复堆叠。
-
页面文件越来越长:一个页面文件里同时写数据请求、布局、表单、卡片、按钮、状态展示,阅读成本很高。
-
设计规范无法落地:设计上已经有按钮、卡片、标签、输入框规范,但代码里没有稳定对应物。
-
移动端问题反复出现:每个页面独立修响应式,导致同类模块在不同页面表现不一致。
反过来说,如果产品方向还没有稳定、页面布局每天都在推翻、组件规则还没有形成共识,不建议一次性做大规模组件系统。可以先让 Codex 做“重复 UI 盘点”和“候选组件清单”,不急着动代码。
二、先让 Codex 做页面资产盘点,而不是直接改代码
整理组件系统的第一步不是创建 components 文件夹,而是知道项目里到底有哪些重复页面资产。Codex 需要先阅读路由、页面文件、已有组件、样式文件和设计 token,然后输出一张“组件化候选清单”。
这一步的目标是让 Codex 回答四个问题:哪些页面重复?哪些 UI 可以抽?哪些组件已经存在但用法混乱?哪些地方风险最高,暂时不该碰?
| 盘点对象 | Codex 应该输出什么 | 目的 |
|---|---|---|
| 页面路由 | 页面路径、核心模块、是否存在重复结构 | 确认改动范围 |
| 重复 UI | 按钮、卡片、列表、表单、筛选器、状态组件 | 找到最值得抽象的部分 |
| 已有组件 | 组件名称、使用位置、props 设计、是否重复 | 避免重复造组件 |
| 样式模式 | 颜色、字号、间距、圆角、阴影、响应式写法 | 统一视觉实现方式 |
| 风险区域 | 含复杂状态、接口、权限、支付、埋点的文件 | 避免 Codex 误改核心逻辑 |
页面盘点指令
请先不要修改代码。请阅读当前项目的页面、路由、components、styles、tailwind 配置和设计 token,然后输出一份“页面组件化盘点报告”。 要求: 1. 列出所有主要页面路径和对应文件。 2. 找出重复出现的 UI 模式,例如按钮、卡片、列表、筛选栏、表单、空状态、弹窗、导航、页头、页脚。 3. 标记每个重复 UI 出现在哪些页面和文件中。 4. 判断哪些可以抽成基础 UI 组件,哪些应该是业务组件,哪些暂时不适合抽象。 5. 不要修改任何文件,只输出分析报告。 输出格式: - 页面清单 - 重复 UI 清单 - 候选组件清单 - 高风险文件清单 - 建议的组件目录结构 - 第一批最适合重构的低风险任务
三、把组件分成三层,不要做成一个大杂烩
散乱页面整理失败,最常见的原因是组件分层混乱。很多项目把所有东西都丢进 components,最后既有 Button,也有 UserBillingPaymentCard,还有 HalfReusablePageHeader。看起来变成了组件系统,实际只是换了一个地方堆代码。
更适合 Codex 执行的方式,是明确三层组件边界:基础 UI 组件、通用组合组件、业务组件。每一层的职责不同,复用范围也不同。
| 组件层级 | 适合放什么 | 不应该放什么 |
|---|---|---|
| 基础 UI 组件 | Button、Input、Textarea、Select、Badge、Card、Modal、Tabs、Tooltip | 业务字段、接口请求、页面专属逻辑 |
| 通用组合组件 | PageHeader、FilterBar、EmptyState、Pagination、SectionCard、DataList | 具体业务数据请求、权限判断 |
| 业务组件 | ProductCard、PricingPlanCard、OrderStatusPanel、UserProfileBlock | 过度通用的 props、跨业务强行复用 |
这一层级设计对 Codex 很重要。你要明确告诉它:基础 UI 组件只处理视觉和交互状态;组合组件处理常见页面结构;业务组件可以知道业务语义,但不能把页面级数据请求和路由跳转全部塞进去。
推荐目录结构
src/ components/ ui/ # 最基础的视觉组件:Button、Card、Input、Badge common/ # 跨页面通用组件:PageHeader、EmptyState、FilterBar domain/ # 业务组件:ProductCard、ArticleCard、ProjectCard layout/ # 布局组件:Header、Footer、Sidebar、Container lib/ design-tokens.ts # 颜色、间距、圆角、断点等可复用变量 docs/ components.md # 组件说明、使用场景、props 规则、迁移记录
四、让 Codex 先做“低风险组件”,不要一口气重构全站
第一次整理组件系统,最适合从低风险 UI 开始。低风险组件通常是不涉及接口、不涉及权限、不涉及复杂状态的纯展示模块。比如按钮、标签、卡片外壳、页头、空状态、分页、容器布局。
高风险区域要放后面,例如登录、支付、权限、表单校验、数据提交、埋点、复杂筛选逻辑。这些模块不是不能组件化,而是需要更严格的测试和人工验收。
| 优先级 | 适合 Codex 先处理 | 原因 |
|---|---|---|
| 第一批 | Button、Badge、Card、EmptyState、PageHeader、Container | 视觉重复多,业务风险低 |
| 第二批 | FilterBar、Pagination、Tabs、Modal、FormField | 有交互状态,需要更细验收 |
| 第三批 | 业务卡片、复杂列表、数据表格、订单/用户模块 | 涉及业务语义,需要保守迁移 |
| 最后处理 | 登录、支付、权限、数据提交、埋点 | 改动风险最高,必须有测试覆盖 |
五、一条可直接复制的 Codex 执行指令
下面这条指令适合用在 React、Next.js、Vite、Tailwind 项目里。它的重点不是让 Codex “发挥”,而是约束它先分析、再计划、分批修改、最后自检。
你现在是一名前端架构整理助手。请帮我把当前项目中散乱的页面整理成可维护的组件系统。 项目背景: - 这是一个已经有多个页面的前端项目。 - 当前问题是页面里存在大量重复 UI、重复 Tailwind/CSS 类名、重复卡片/按钮/筛选栏/空状态写法。 - 我希望保留现有页面视觉、交互和业务逻辑,不做重新设计。 核心目标: 1. 盘点当前页面、路由、已有 components 和样式文件。 2. 找出重复 UI 模式,并判断哪些适合抽成组件。 3. 建立清晰的组件目录结构,例如 components/ui、components/common、components/domain、components/layout。 4. 优先抽取低风险、纯展示、重复率高的组件。 5. 把页面中的重复代码逐步替换为新组件。 6. 补充组件使用说明文档,说明每个组件的用途、props 和适用场景。 7. 不改变业务逻辑、不改接口、不改路由、不改文案含义、不重做视觉风格。 执行限制: - 不要一次性大改全站。 - 不要引入新的 UI 框架,除非项目已经在使用。 - 不要把业务逻辑塞进基础 UI 组件。 - 不要创建万能组件。 - 不要删除暂时无法确认用途的代码。 - 不要改动后端接口、环境变量、权限逻辑和数据提交逻辑。 执行步骤: 第一步:只分析,不改代码,输出页面组件化盘点报告。 第二步:提出组件目录结构和第一批低风险重构清单。 第三步:在我确认后,先重构第一批组件。 第四步:每完成一批,运行 lint、typecheck、test、build 中项目已有的命令。 第五步:输出变更文件、组件清单、替换前后映射和人工验收建议。 验收标准: - 页面视觉和交互保持一致。 - TypeScript 不报错。 - lint / build 通过。 - 重复 UI 明显减少。 - 新组件命名清晰,props 简洁。 - 文档中能看懂每个组件的使用场景。 请先执行第一步:输出盘点报告和第一批重构建议,不要修改代码。
六、如果要让 Codex 真正执行,建议分两轮指令
不要一开始就让 Codex 改完整个项目。更稳的流程是第一轮只分析,第二轮再执行第一批低风险改动。这样你可以先看到它对项目的理解是否正确。
第一轮:只盘点,不修改
请只做分析,不修改代码。输出当前项目的组件化盘点报告,并给出第一批低风险组件抽取建议。
第二轮:只执行第一批低风险重构
根据上一轮确认的方案,只执行第一批低风险组件重构。 范围: - 只处理 Button、Card、Badge、EmptyState、PageHeader、Container 这类纯展示或低交互组件。 - 不处理登录、支付、权限、数据提交、复杂表单和接口逻辑。 要求: 1. 创建或整理对应组件文件。 2. 替换页面中的重复代码。 3. 保持视觉和交互一致。 4. 运行项目已有检查命令。 5. 输出变更说明和人工验收清单。
七、把组件规则写进 AGENTS.md,让后续任务保持一致
组件系统真正有价值,不是只整理一次,而是让后续每次新增页面、修复样式、做功能迭代时都继续遵守同一套规则。对于 Codex 这类 coding agent,可以把组件目录、命名规则、禁止事项、测试命令写进 AGENTS.md。这样 Codex 在后续任务里会先读取项目说明,不需要每次重新解释。
组件系统规则 ## 目录约定 - 基础 UI 组件放在 src/components/ui。 - 跨页面通用组件放在 src/components/common。 - 业务组件放在 src/components/domain。 - 布局组件放在 src/components/layout。 - 组件说明文档放在 docs/components.md。 ## 命名规则 - 基础组件使用通用名称:Button、Card、Input、Badge。 - 业务组件使用业务语义名称:ArticleCard、ProjectCard、PricingPlanCard。 - 不允许创建含义不清的组件名,例如 CommonBox、NewCard、TempSection。 ## 组件设计规则 - 基础 UI 组件不得包含接口请求、路由跳转、业务判断。 - props 保持简洁,不为单个页面硬塞特殊参数。 - 优先复用现有 token、Tailwind 规则和项目已有样式。 - 不改变现有页面视觉、交互、文案含义和业务逻辑。 ## 重构规则 - 每次只处理一批低风险组件。 - 修改后必须运行项目已有的 lint、typecheck、test 或 build 命令。 - 输出变更文件、组件清单、影响页面和人工验收点。
八、验收标准:不要只看“代码变少了”
组件化不是把代码行数变少就成功。真正的验收标准应该同时看视觉一致性、复用价值、组件边界、类型安全和后续维护成本。
-
页面视觉一致:按钮、卡片、列表、空状态、间距和响应式表现与重构前保持一致。
-
业务逻辑未变化:接口请求、权限判断、路由跳转、表单提交、埋点逻辑没有被顺手改掉。
-
组件边界清晰:基础 UI 组件不包含业务逻辑,业务组件不被强行做成万能组件。
-
类型定义明确:组件 props 有清晰类型,避免 any 泛滥。
-
重复代码减少:同一类 UI 不再散落在多个页面里重复维护。
-
检查命令通过:lint、typecheck、test、build 至少通过项目已有的关键命令。
-
文档可读:新同事能通过 docs/components.md 知道组件放在哪里、什么时候使用、不要怎么用。
九、常见错误:这些指令会让 Codex 改坏项目
用 Codex 做组件系统整理,最怕的是目标太大、约束太少。下面这些写法容易让 Codex 大范围重写项目。
| 错误指令 | 问题 | 更好的写法 |
|---|---|---|
| 帮我重构一下所有页面 | 范围过大,Codex 可能同时动视觉、逻辑和目录 | 先输出页面组件化盘点报告,不要修改代码 |
| 把所有重复代码都抽成组件 | 会导致过度抽象和万能组件 | 只抽取重复率高、低风险、纯展示组件 |
| 顺便优化一下 UI | 会改变原有设计和验收标准 | 保持现有视觉,不做重新设计 |
| 把组件系统做完整 | 目标不清,容易一次性大改 | 分批完成:基础 UI、通用组合、业务组件 |
| 你看着办 | 缺少边界,风险最高 | 明确禁止改业务逻辑、接口、路由、权限和数据提交 |
十、适合发布在达灵感的组件化任务模板
如果要把这类需求做成达灵感的一键任务模板,可以把任务拆成三个按钮或三个模板,而不是只提供一个“大重构”按钮。
-
模板 1:组件化体检报告只分析当前项目,输出重复 UI、候选组件、风险清单,不修改代码。
-
模板 2:低风险组件抽取只处理 Button、Card、Badge、EmptyState、PageHeader 等低风险组件。
-
模板 3:组件系统规范固化生成或更新 AGENTS.md 和 docs/components.md,把组件规则长期沉淀下来。
这样的任务拆分更符合真实使用场景。用户不一定一开始就信任 Codex 改全站,但很可能愿意先让它做体检报告,再逐步执行低风险改造。
FAQ
1. Codex 能不能直接把整个项目整理成组件库?
技术上可以让它做大范围重构,但不建议直接这么做。更稳妥的方式是先盘点,再确认组件边界,然后分批处理低风险组件。组件系统不是一次性生成的,而是逐步收敛出来的。
2. 已经有 components 文件夹,还需要整理吗?
需要看里面是否有清晰分层。如果 components 里只是堆了很多页面拆出来的文件,没有命名规则、props 规范、文档和使用边界,维护成本依然会很高。
3. Codex 抽组件时会不会改坏页面样式?
有可能。所以指令里必须明确“保持现有视觉和交互,不做重新设计”,并要求 Codex 输出影响页面和人工验收清单。最好配合截图对比、Playwright 测试或人工逐页检查。
4. 组件系统一定要做设计 token 吗?
不一定一开始就完整做。早期可以先统一颜色、字号、间距、圆角、阴影和断点的使用方式。如果项目已经有 Tailwind 配置或 CSS 变量,可以让 Codex 优先复用现有规则。
5. 设计师怎么参与这类 Codex 任务?
设计师可以提供按钮、卡片、表单、标签、弹窗、空状态等组件的视觉规则,并让 Codex 对照现有页面检查实现是否一致。这样 Codex 负责代码整理,设计师负责规则和验收。
6. 组件抽象到什么程度算合适?
一个实用标准是:同类 UI 在多个地方重复出现,并且未来还会继续出现,就值得抽。只服务一个页面、参数很多、逻辑很特殊的模块,不要强行抽成通用组件。
总结
用 Codex 把散乱页面整理成组件系统,关键不是写一句“帮我重构”,而是把任务拆清楚:先盘点页面资产,再识别重复 UI,再设计组件边界,再从低风险组件开始迁移,最后用 AGENTS.md 和文档把规则固定下来。
对真实项目来说,最有价值的不是一次性生成一个漂亮的 components 文件夹,而是让后续每个页面都能复用同一套按钮、卡片、列表、筛选栏和布局规则。这样页面越多,系统反而越稳定,而不是越写越乱。
参考资料
-
OpenAI Developers:Codex 文档,说明 Codex 是用于软件开发的 coding agent,可辅助写代码、审查、修复问题和理解代码库。
-
OpenAI Developers:Codex Quickstart,说明 Codex Agent mode 可以读取文件、运行命令并写入项目目录。
-
OpenAI Developers:Custom instructions with AGENTS.md,说明 Codex 会在工作前读取 AGENTS.md,用于提供项目上下文和约束。
-
OpenAI Help:Using Codex with your ChatGPT plan,说明 Codex 是帮助写、审查和交付代码的 AI agent。
