摘要
在中大型前端团队开发中,代码复用低、公共能力分散、版本管理混乱、协作不规范是核心痛点。本文介绍企业级前端公共能力标准化体系 spc-fe-common,基于 Monorepo 架构,通过统一仓库、规范、发版与共建模式,解决团队开发痛点,提升效率与代码质量,为企业级前端架构演进提供了可落地、可扩展的实践方案,供有同类需求的团队参考借鉴。
一、项目总览
1.1 项目目标
以 Monorepo 为核心,构建企业级前端公共能力标准化体系,实现代码高复用、开发高效化、协作规范化、版本可控化,从根本上解决多仓库维护繁琐、公共能力复用困难的问题。
1.2 核心理念
- 📦 单一仓库管理:Monorepo 集中管理所有公共能力,降低多仓库维护成本,减少跨仓库协作损耗
- 🏷️ 标准化命名:统一前缀
@spc-fe-common/,辨识度高、管理便捷,避免命名混乱 - 🚀 独立发版:各能力包解耦,支持独立版本控制与 npm 发布,不影响其他包使用
- 🛡️ 质量保障:单元测试覆盖率 ≥ 80%,强制代码校验,从源头保障代码稳定性与可维护性
- 🤝 共建机制:双人审核 + 规范提交,全员共建维护,确保代码质量与规范统一
1.3 项目目录结构
bash
spc-fe-common/
├── packages/ # 核心能力包集合(业务核心)
├── docs/ # 项目文档、API 手册
├── scripts/ # 自动化脚本(构建/发布/测试)
├── .github/ # CI/CD 配置
├── CONTRIBUTING.md # 共建规范
├── DESIGN.md # 技术方案
├── package.json # 根配置
├── pnpm-workspace.yaml # Monorepo 工作空间配置
├── tsconfig.json # TypeScript 统一配置
└── README.md # 项目说明
二、标准能力大仓( 11 个核心能力包 )
| 能力分类 | 包名 | 核心功能 |
|---|---|---|
| 上下文管理 | @spc-fe-common/context |
全局状态共享、跨组件/模块通信 |
| 通用请求 | @spc-fe-common/request |
HTTP 请求封装、拦截、重试、缓存 |
| 模块加载器 | @spc-fe-common/loader |
微前端远程模块动态加载、版本管控 |
| CDN 能力 | @spc-fe-common/cdn |
CDN 资源统一加载、多环境切换、降级 |
| 微前端通信 | @spc-fe-common/bridge |
主子应用/子应用间事件通信、数据共享 |
| 国际化翻译 | @spc-fe-common/i18n |
多语言切换、动态语言包、占位符处理 |
| 打印能力 | @spc-fe-common/printer |
面单/标签/报表打印、预览、设备适配 |
| 公共函数工具库 | @spc-fe-common/utils |
高频工具函数(格式化、防抖等) |
| 公共 Hooks 库 | @spc-fe-common/hooks |
React 业务 Hooks 封装(请求、生命周期等) |
| 监控能力 | @spc-fe-common/tracker |
性能/错误/行为监控、数据上报 |
| Base 基座包 | @spc-fe-common/base |
微前端基座、子应用管理、路由管控 |
三、核心能力包精简详解
3.1 上下文管理( @spc-fe-common/context )
应用级全局状态管理,实现跨组件、跨模块、跨应用的数据共享,支持 TypeScript 类型安全,有效避免状态混乱,适配全局配置、用户信息、主题切换、权限控制等常见场景。
3.2 通用请求( @spc-fe-common/request )
企业级 HTTP 请求封装,整合请求/响应拦截器、统一错误处理、请求重试、缓存策略、超时控制等核心能力,消除业务中重复的请求代码,提升接口调用的规范性与可维护性。
typescript
import { request } from '@spc-fe-common/request';
// GET 请求
const data = await request.get('/api/users', { params: { page: 1 } });
// POST 请求
const result = await request.post('/api/users', { name: 'John' });
3.3 微前端核心能力( loader/bridge/base )
- loader:微前端远程模块动态加载工具,支持按需加载、模块缓存、加载失败重试,适配微前端子应用与动态插件加载场景
- bridge:微前端跨应用通信解决方案,采用事件发布/订阅模式,实现主子应用、子应用间的低耦合通信,保障通信稳定性
- base:微前端基座核心包,负责基座初始化、子应用注册与管理、全局路由调度、应用生命周期管理,是微前端架构的核心支撑
3.4 高频工具能力( utils/hooks )
- utils:前端高频工具函数集合,涵盖数据类型判断、数组/对象/字符串处理、日期格式化、URL 参数解析、防抖节流、深拷贝等,零学习成本、即引即用
- hooks:React 业务 Hooks 封装,包含 useRequest(请求封装)、useDebounce/useThrottle(防抖节流)、useLocalStorage(本地存储)等常用 Hooks,简化组件代码,提升开发效率
3.5 其他能力( cdn/i18n/printer/tracker )
- cdn:第三方 CDN 资源统一管理工具,支持 dev/test/prod 多环境自动切换,提供资源预加载与加载失败降级机制,保障资源加载稳定性
- i18n:一站式多语言解决方案,支持一键语言切换、动态加载语言包、占位符与复数形式处理,适配出海业务多语言需求
- printer:统一打印能力封装,屏蔽不同打印机、不同打印场景的差异,支持面单、标签、报表打印及预览,适配 PDF 打印、热敏打印机等多种类型
- tracker:前端全链路监控工具,可采集性能指标( FP/FCP/LCP 等)、JS 错误、资源加载错误、用户行为数据,支持自定义埋点与批量上报,支撑线上问题排查与体验优化
四、项目脚手架( @spc-fe-common/cli )
专属项目脚手架,一键生成标准化前端项目,内置全套规范与配置,大幅提升项目初始化效率,避免重复配置成本。
核心功能
- 多模板选择:基于 React/Vue + Webpack/Vite 构建,适配不同业务场景
- 内置规范:自动集成 ESLint + Prettier 代码规范、Jest/Vitest 单元测试、Husky + lint-staged Git 钩子,保障代码质量
bash
# 全局安装
npm i -g @spc-fe-common/cli
# 创建项目
spc-fe create my-project
五、标准化规范体系
5.1 Monorepo 管理规范
基于 pnpm workspace 实现 Monorepo 管理,统一依赖版本,避免版本冲突;遵循最小化包间依赖原则,降低耦合度;采用原子化提交规范,清晰追溯代码变更;统一构建、测试、发布自动化脚本,提升协作效率。
5.2 包命名规范
所有能力包统一使用前缀 @spc-fe-common/,采用小写 kebab-case 格式,命名需语义化,见名知意(规范示例:@spc-fe-common/request)。
5.3 版本发版规范
遵循 Semver 语义化版本规范,版本号格式为「主版本号.次版本号.修订号」,其中主版本号对应不兼容 API 更新,次版本号对应向下兼容的新功能,修订号对应向下兼容的 bug 修复;自动化发版流程如下:
是
否
代码合并主分支
自动执行单元测试
测试通过?
自动生成 Changelog
终止发版,通知开发者
自动打 Git Tag
自动发布至 NPM
发版命令:pnpm run release:patch(修订版)、pnpm run release:minor(次版本)、pnpm run release:major(主版本)。
5.4 共建与测试规范
- Code Review:所有 PR 需至少 2 人审批通过方可合入,同时校验代码规范与单元测试覆盖率(不低于 80%)
- PR 提交:遵循「[类型] 简短描述」格式,类型包括 feat(新功能)、fix(bug 修复)、docs(文档更新)等,描述不超过 50 字符
- 单元测试:React 项目使用 Jest + React Testing Library,Vue 项目使用 Vitest + Vue Test Utils,测试文件与源码同级,确保代码可测试性
六、总结
6.1 核心技术栈
| 技术分类 | 选型 |
|---|---|
| 包管理 | pnpm workspace |
| 构建工具 | Vite、Webpack |
| 开发语言 | TypeScript |
| 测试、代码规范、Git Hooks | Jest/Vitest、ESLint/Prettier、Husky/lint-staged |
| CI/CD | GitHub Actions |
6.2 设计原则与性能优化
- 设计原则:遵循单一职责(一个包专注单一功能)、开放封闭(对扩展开放、对修改封闭)、依赖倒置(依赖抽象接口)、最小知识(最小化包间依赖)四大原则,保障体系可扩展、低耦合
- 性能优化:支持 Tree Shaking 按需加载,仅打包使用代码;剔除冗余代码、压缩输出、排除外部依赖,优化包体积;实现模块缓存、请求缓存、CDN 缓存多维度缓存策略,提升加载性能
附录:核心术语说明
| 术语 | 解释 |
|---|---|
| Monorepo | 单一仓库管理多个包/项目,简化多仓库维护成本 |
| Semver | 语义化版本控制规范,用于版本管理与发版控制 |
| Tree Shaking | 移除未使用代码的优化技术,减小包体积 |
| CI/CD | 持续集成/持续部署,实现代码自动测试、构建、发布 |