设计原则
复制源码组件的优势是可控和可改,代价是项目团队自己承担一致性、升级、授权声明和设计系统适配。
大理论
复制源码不是安装黑盒库。组件一旦进入仓库,就应按本地组件治理:命名、token、variant、状态、测试和文档都要归入项目标准。
小知识点
- 每个 copy-in 组件都要映射到本地颜色、半径、阴影、间距和字体 token。
- variant 应表达产品语义,例如 primary、secondary、danger、ghost,而不是照搬参考项目所有外观选项。
- 组件状态至少检查 default、hover、focus-visible、disabled、loading、error、empty、selected 和 reduced-motion。
- 升级不能盲目覆盖本地文件,应通过 diff 对比行为、API 和样式变化。
设计判断
如果组件只是复制后到处改 className,后续会形成隐形分叉;如果它被收敛成本地 API、状态矩阵和 token 契约,它才是可维护资产。
实现建议
新增 copy-in 组件时同步写入:来源 URL、版本或提交、license、依赖 primitive、token 映射、可访问性检查点、页面使用示例和不允许的改法。复杂组件应增加 Story/preview 或本地测试页。
反例/风险
直接复制 dashboard block 后保留外部颜色变量、把 Pro/付费 blocks 混入开源库、不同页面私改按钮半径、升级 shadcn 后覆盖本地可访问性修复。
案例分析
shadcn/ui 的 GitHub 介绍强调它是 open source、open code 和 code distribution platform,并声明 MIT license。可学习点是:它更像组件源码分发机制,而不是传统 UI package;入库后应该按本地代码资产治理。
来源链接
shadcn/ui: https://ui.shadcn.com/ shadcn/ui GitHub: https://github.com/shadcn-ui/ui
Agent 指令
复制组件前先登记来源和授权;复制后立刻改成本地 token、API 和状态矩阵,禁止把参考库样式散落到页面。