系统设计:企业级组件库

目标

组件库的核心不是“把按钮放进 npm”,而是让多个团队获得一致、稳定、可扩展的产品语言。

分层设计

Design Tokens
基础组件 Button / Input / Icon
复合组件 Form / Table / Dialog
业务模式 SearchPanel / UserPicker
  • Token 描述颜色、字号、间距和动效等设计决策。
  • 基础组件保持通用和稳定。
  • 业务组件与通用组件分包,避免核心包被单一业务污染。

API 设计原则

  • 优先组合而不是堆积布尔属性。
  • 同类组件使用一致的命名、受控模式和事件语义。
  • 通过稳定扩展点满足自定义,不暴露内部 DOM 细节。
  • 默认值解决主流场景,高级能力按需启用。
  • 避免把后端字段和业务枚举写进通用组件。

构建与发布

  • 输出 ESM,并按需提供兼容格式。
  • 保证 Tree Shaking,样式和组件支持按需加载。
  • 使用语义化版本和变更日志。
  • 破坏性更新提供迁移指南、codemod 和弃用周期。
  • PR 中执行类型、lint、单测、视觉回归和产物体积检查。

文档与测试

  • 每个组件提供使用场景、边界、反例和在线示例。
  • 单元测试关注状态和事件。
  • 交互测试覆盖键盘、弹层和表单流程。
  • 视觉回归检测颜色、间距和布局变化。
  • 发布后保留可搜索的版本化文档。

主题与多品牌

主题差异通过语义 Token 表达,例如 color-text-primary,而不是在组件中硬编码品牌颜色。运行时切换可使用 CSS 自定义属性;构建时主题可用于强隔离品牌包体。

多团队治理

  • 核心维护者负责 API 和发布质量。
  • RFC 记录重大设计决策。
  • 使用统计帮助判断组件是否能安全废弃。
  • 设定响应周期,避免业务团队因等待而复制组件。

高频追问

  • 如何避免组件 API 越来越臃肿?
  • 组件库升级如何防止一次性影响所有业务?
  • 如何处理样式隔离和主题切换?
  • 为什么组件库不应该依赖某个业务的全局状态?