前端架构治理演进规划

一、背景与目标

1.1 现状分析

经过 Phase 1~4 的微前端治理(详见 doc/wujie集成.md),已完成:

已完成项成果
微前端框架iframe → wujie,7 个子应用统一接入
通信协议postMessage → wujie bus,类型化事件
子应用预加载preloadChildApps 高/低优先级分级
CSS 统一UnoCSS → Tailwind CSS 4
Monorepopnpm workspace + Turborepo

但微前端只是架构治理的第一步。 当前 7 个子应用之间存在大量重复建设:

重复领域现状影响
UI 组件每个子应用独立封装 Table/Form/Dialog7 份重复代码,风格不统一
业务组件客户选择器、产品选择器等各自实现逻辑不一致,Bug 修一处漏六处
Utils 工具函数日期格式化、金额计算、权限判断各写一套维护成本 ×7
Hooks/ComposablesuseTable、useForm、useDict 各子应用独立无法共享最佳实践
API 层接口定义、拦截器、错误处理各自维护后端改一个字段,前端改 7 处
类型定义业务实体 TS 类型各子应用独立定义类型不同步,联调困难

1.2 治理目标

                    ┌─────────────────────────────────┐
                    │        业务应用层(7 个子应用)     │
                    │   mkt / doc / ibs-manage / ...   │
                    └──────────────┬──────────────────┘
                                   │ 消费
                    ┌──────────────┴──────────────────┐
                    │        公共资源层(packages)       │
                    │                                   │
                    │  ┌───────────┐  ┌─────────────┐  │
                    │  │ UI 组件库  │  │ 业务组件库   │  │
                    │  │@cmclink/ui│  │@cmclink/biz  │  │
                    │  └───────────┘  └─────────────┘  │
                    │  ┌───────────┐  ┌─────────────┐  │
                    │  │ Hooks 库  │  │  Utils 库    │  │
                    │  │@cmclink/  │  │@cmclink/     │  │
                    │  │ hooks     │  │ utils        │  │
                    │  └───────────┘  └─────────────┘  │
                    │  ┌───────────┐  ┌─────────────┐  │
                    │  │ API SDK   │  │  类型定义    │  │
                    │  │@cmclink/  │  │@cmclink/     │  │
                    │  │ api       │  │ types        │  │
                    │  └───────────┘  └─────────────┘  │
                    └──────────────┬──────────────────┘
                                   │ 支撑
                    ┌──────────────┴──────────────────┐
                    │        基础设施层                  │
                    │  micro-bridge / vite-config /     │
                    │  tsconfig / eslint-config         │
                    └──────────────────────────────────┘

核心原则

  1. 资源化 — 可复用的代码提取为独立 package
  2. 公共化 — 跨子应用共享,单点维护
  3. 文档化 — 每个公共包配套使用文档和示例
  4. AI 友好 — 沉淀为 AI Agent 可消费的 Skills/MCP 资源

二、公共资源沉淀规划

2.1 @cmclink/ui — 基础 UI 组件库

定位:基于 Element Plus 二次封装的业务通用 UI 组件。

组件说明来源
CmcTable统一表格(分页、排序、列配置、导出)各子应用 useTable + 模板代码
CmcForm统一表单(校验、布局、动态字段)各子应用表单封装
CmcDialog统一弹窗(确认、表单弹窗、详情弹窗)各子应用 Dialog 封装
CmcSearch搜索栏(条件组合、折叠展开、快捷搜索)各子应用搜索区域
CmcUpload文件上传(拖拽、预览、进度、断点续传)各子应用上传组件
CmcEditor富文本编辑器(统一配置)各子应用编辑器封装
CmcDescription详情描述列表各子应用详情页

实施策略

packages/
└── ui/
    ├── package.json          # @cmclink/ui
    ├── src/
    │   ├── components/       # 组件源码
    │   │   ├── CmcTable/
    │   │   ├── CmcForm/
    │   │   └── ...
    │   ├── composables/      # 组件内部 hooks
    │   └── index.ts          # 统一导出
    └── docs/                 # 组件文档(可选 VitePress)

2.2 @cmclink/biz — 业务组件库

定位:与业务强相关的可复用组件,跨产品线共享。

组件说明使用方
CustomerSelector客户选择器(搜索、分页、多选)mkt / doc / commerce-finance
ProductSelector产品选择器mkt / operation
PortSelector港口选择器doc / operation
VesselSelector船名航次选择器doc / operation
DictSelect字典下拉(统一字典管理)全部子应用
UserSelector用户/员工选择器全部子应用
ApprovalFlow审批流程组件多个子应用

2.3 @cmclink/hooks — 通用 Composables

定位:跨子应用复用的 Vue 3 组合式函数。

Hook说明当前状态
useTable表格数据管理(分页、排序、筛选、刷新)各子应用独立实现
useForm表单状态管理(校验、提交、重置)各子应用独立实现
useDict字典数据获取与缓存各子应用独立实现
usePermission权限判断(按钮级、菜单级)各子应用独立实现
useExport数据导出(Excel/CSV/PDF)各子应用独立实现
useWebSocketWebSocket 连接管理部分子应用实现
useI18n国际化增强(业务术语统一翻译)各子应用独立实现
useCrudCRUD 操作封装(增删改查一体)各子应用独立实现

2.4 @cmclink/utils — 工具函数库

定位:纯函数工具集,零依赖或仅依赖 lodash-es

模块函数示例说明
dateformatDate, diffDays, toUTC日期处理(统一格式)
moneyformatMoney, toFixed, currencyConvert金额计算(精度安全)
validatorisPhone, isEmail, isTaxNo业务校验规则
formatterformatFileSize, formatDuration格式化工具
treeflatToTree, treeToFlat, findNode树结构操作
authgetToken, setToken, removeToken认证工具
storagegetCache, setCache, removeCache存储封装

2.5 @cmclink/api — API SDK

定位:统一的后端接口定义层,前后端类型对齐。

// packages/api/src/modules/customer.ts
import type { Customer, CustomerQuery } from '@cmclink/types'
import { request } from '../request'

/** 客户列表 */
export const getCustomerList = (params: CustomerQuery) =>
  request.get<PageResult<Customer>>('/admin-api/customer/page', { params })

/** 客户详情 */
export const getCustomerDetail = (id: number) =>
  request.get<Customer>(`/admin-api/customer/get?id=${id}`)

价值

  • 后端改接口 → 只改 @cmclink/api 一处 → 所有子应用自动同步
  • TypeScript 类型约束 → 编译期发现接口不匹配
  • 可自动生成 → 结合 Swagger/OpenAPI 自动生成 SDK

2.6 @cmclink/types — 共享类型定义

定位:业务实体的 TypeScript 类型定义,前后端对齐。

// packages/types/src/customer.ts
export interface Customer {
  id: number
  name: string
  code: string
  contactPerson: string
  phone: string
  email: string
  status: CustomerStatus
  createdAt: string
}

export type CustomerStatus = 'active' | 'inactive' | 'pending'

export interface CustomerQuery {
  name?: string
  code?: string
  status?: CustomerStatus
  pageNo: number
  pageSize: number
}

三、前后端职能对齐

3.1 基础架构团队职责矩阵

职责领域前端基础架构后端基础架构协同点
框架治理微前端(wujie)、Monorepo微服务、网关子应用 ↔ 微服务 1:1 映射
通信协议wujie bus 事件定义API 接口规范事件名 / 接口路径统一命名
类型系统@cmclink/typesSwagger/OpenAPI自动生成 TS 类型
API 层@cmclink/api SDKRESTful API 实现SDK 自动生成
权限体系前端按钮/菜单权限后端接口权限权限码统一定义
国际化前端翻译资源后端错误码翻译翻译 Key 统一管理
监控告警前端性能/错误上报后端 APM全链路 TraceID 打通
CI/CD前端构建部署后端构建部署统一流水线、环境管理

3.2 前后端类型自动同步方案

后端 Swagger/OpenAPI 定义
         │
         ▼
    openapi-typescript / swagger-typescript-api
         │
         ▼
  @cmclink/types(自动生成 TS 类型)
         │
         ▼
  @cmclink/api(自动生成 API SDK)
         │
         ▼
    各子应用直接消费

工具选型

  • openapi-typescript:从 OpenAPI 3.0 生成 TypeScript 类型
  • swagger-typescript-api:从 Swagger 生成完整的 API Client

四、AI 编程能力沉淀

4.1 为什么基础架构要考虑 AI

AI 编程(Copilot、Cursor、Windsurf 等)已成为开发者日常工具。公共资源的质量直接决定 AI 生成代码的质量

AI 编程痛点根因基础架构解法
AI 生成的代码风格不统一缺乏项目级规范上下文.windsurf/rules/ 规范文件
AI 不了解业务组件 API组件文档缺失或分散组件库 + JSDoc + 示例
AI 重复造轮子不知道已有公共函数@cmclink/utils + @cmclink/hooks
AI 生成的接口调用不对不了解后端 API 结构@cmclink/api 类型化 SDK
AI 无法理解项目架构架构文档不完善架构决策记录(ADR)

4.2 Agent Skills 沉淀

将项目规范和最佳实践沉淀为 AI Agent 可消费的 Skills:

.windsurf/
├── rules/                    # 已有:27 个专项规范
│   ├── core.mdc
│   ├── vue3-component-standards.mdc
│   ├── typescript-standards.mdc
│   └── ...
├── workflows/                # 工作流定义
│   ├── create-component.md   # 新建组件工作流
│   ├── create-api-module.md  # 新建 API 模块工作流
│   ├── create-page.md        # 新建页面工作流
│   └── migrate-child-app.md  # 子应用迁入工作流
└── skills/                   # AI Skills 定义(规划中)
    ├── cmclink-ui.md         # UI 组件库使用指南
    ├── cmclink-api.md        # API SDK 使用指南
    └── cmclink-patterns.md   # 业务模式最佳实践

Skills 示例 — 新建 CRUD 页面

---
description: 创建标准 CRUD 页面(列表 + 新增 + 编辑 + 删除)
---

1.`@cmclink/types` 中定义实体类型
2.`@cmclink/api` 中定义接口
3. 使用 `CmcTable` + `CmcSearch` + `CmcForm` 组合
4. 使用 `useCrud` hook 管理状态
5. 使用 `usePermission` 控制按钮权限

4.3 MCP Server 能力规划

MCP(Model Context Protocol) 让 AI Agent 能够直接访问项目资源:

MCP 能力说明价值
组件文档查询AI 查询 @cmclink/ui 组件 Props/Slots/Events生成代码直接使用正确的组件 API
API 接口查询AI 查询后端接口定义和参数生成的接口调用代码类型正确
字典数据查询AI 查询业务字典(状态码、类型码)生成代码使用正确的枚举值
权限码查询AI 查询按钮/菜单权限码生成的权限判断代码准确
代码模板生成AI 基于模板生成标准化页面新页面开发效率 ×3

MCP Server 架构

┌──────────────────────────────────────────────┐
│              AI Agent (Windsurf/Cursor)        │
│                                                │
│  "帮我创建一个客户管理的 CRUD 页面"              │
└──────────────────┬─────────────────────────────┘
                   │ MCP Protocol
┌──────────────────┴─────────────────────────────┐
│            @cmclink/mcp-server                  │
│                                                 │
│  ┌─────────────┐  ┌──────────────────────────┐ │
│  │ 组件文档资源 │  │ API 接口资源              │ │
│  │ (Resources) │  │ (Resources)              │ │
│  └─────────────┘  └──────────────────────────┘ │
│  ┌─────────────┐  ┌──────────────────────────┐ │
│  │ 代码生成工具 │  │ 字典/权限查询工具         │ │
│  │ (Tools)     │  │ (Tools)                  │ │
│  └─────────────┘  └──────────────────────────┘ │
└─────────────────────────────────────────────────┘

五、实施路线图

5.1 短期(1~2 个月)— 基础沉淀

优先级任务产出负责
P0提取 @cmclink/utils工具函数包基础架构
P0提取 @cmclink/hooks通用 Composables 包基础架构
P0提取 @cmclink/types共享类型定义包基础架构 + 后端
P1完善 .windsurf/rules/AI 规范文件基础架构
P1创建 .windsurf/workflows/标准工作流基础架构

5.2 中期(3~4 个月)— 组件化

优先级任务产出负责
P0搭建 @cmclink/ui 组件库CmcTable / CmcForm / CmcSearch基础架构
P0搭建 @cmclink/api SDK统一 API 调用层基础架构 + 后端
P1搭建 @cmclink/biz 业务组件库客户选择器等业务组件基础架构 + 业务
P1组件文档站(VitePress)在线文档 + 示例基础架构
P2OpenAPI → TypeScript 自动生成类型自动同步流水线基础架构 + 后端

5.3 长期(5~6 个月)— AI 赋能

优先级任务产出负责
P1@cmclink/mcp-serverAI Agent 资源服务基础架构
P1AI Skills 沉淀组件/API/模式使用指南基础架构
P2代码模板生成器标准化页面脚手架基础架构
P2全链路 TraceID 打通前后端监控联动基础架构 + 后端

六、预期收益

6.1 效率提升

场景当前耗时治理后耗时提升
新建 CRUD 页面4~8 小时1~2 小时4x
修复跨子应用 Bug改 7 处改 1 处7x
新子应用接入2~3 天半天5x
后端接口变更适配改 7 个子应用改 1 个 SDK7x
AI 生成代码可用率~30%~80%2.7x

6.2 质量提升

  • 一致性:所有子应用使用相同的组件和交互模式
  • 可维护性:公共代码单点维护,变更自动传播
  • 类型安全:前后端类型自动同步,编译期发现问题
  • AI 友好:规范化的代码库让 AI 生成更准确的代码

6.3 团队赋能

  • 新人上手:标准化组件 + 文档 + AI Skills → 快速产出
  • 跨团队协作:公共组件库是团队间的共同语言
  • 技术影响力:沉淀的基础设施可对外输出

七、风险与缓解

风险影响缓解措施
公共包变更影响所有子应用回归范围大Changesets 版本管理 + 自动化测试
业务组件抽象不当过度抽象或不够通用先在 2 个子应用验证,再推广
AI Skills 维护成本文档过时与代码同仓库,CI 检查文档同步
团队推广阻力业务团队不愿迁移渐进式迁移,新页面优先使用

附录:packages 目录规划

packages/
├── micro-bridge/       # ✅ 已有 — 微前端通信 SDK
├── micro-bootstrap/    # ✅ 已有 — 子应用启动器
├── vite-config/        # ✅ 已有 — 统一 Vite 配置
├── tsconfig/           # ✅ 已有 — 统一 TS 配置
├── ui/                 # 📋 规划 — 基础 UI 组件库
├── biz/                # 📋 规划 — 业务组件库
├── hooks/              # 📋 规划 — 通用 Composables
├── utils/              # 📋 规划 — 工具函数库
├── api/                # 📋 规划 — API SDK
├── types/              # 📋 规划 — 共享类型定义
├── eslint-config/      # 📋 规划 — 统一 ESLint 配置
└── mcp-server/         # 📋 规划 — AI Agent MCP 服务