迁移指南
本指南介绍将组件从 UI1(decentraland-ui)到 UI2(decentraland-ui2).
何时迁移
迁移可以基于三个有效原因开始:
1. 技术改进
你希望迁移某个组件的原因有:
更好的主题支持
改进的 TypeScript 类型
与其他 UI2 组件保持一致
性能优化
可访问性改进
2. 更新组件
某个 UI1 组件需要更新
目前还没有对应的 UI2 版本
要求:先在 UI2 中创建它,然后再使用
3. 项目需求
该组件将用于新项目或现有项目
有足够时间正确完成迁移
项目资源允许进行彻底迁移
迁移流程
步骤 1:规划
在开始迁移之前:
识别依赖
它使用了哪些其他组件?
目前有哪些项目在使用它?
是否计划了任何破坏性变更?
审查当前使用情况
有多少项目使用这个组件?
最常用的是哪些属性?
是否存在已知问题?
定义范围
这会是 1:1 迁移吗?
是否有计划中的改进?
时间安排是什么?
步骤 2:创建 UI2 组件
遵循 自定义组件 UI2 候选组件指南。
要求:
styled-components 使用对象语法
只使用主题值(不使用任意值)
添加完整的 Storybook stories
编写完整测试
记录所有属性和行为
示例结构:
步骤 3:保持兼容性
UI2 组件 必须 应暴露与 UI1 版本相同的属性和行为。
相同的属性
向后兼容的更改
如果你需要更改或添加属性:
首先,先将新属性作为可选项添加到 UI1
然后,将 UI1 的使用方迁移为使用这些新属性
最后,使用新的 API 创建 UI2 组件
步骤 4:将 UI1 组件标记为弃用
在 UI1 组件中添加弃用提示:
步骤 5:逐步采用
不要强制立即迁移。允许逐步采用:
发布 UI2 组件
记录 迁移路径
更新 新项目以使用 UI2
迁移 在合适时机迁移现有项目
规划 最终移除 UI1(附带通知)
迁移示例
示例 1:简单组件
迁移一个基础 Card 组件:
UI1 版本
UI2 版本
示例 2:带变体的组件
迁移一个 Button 及其变体:
UI1 版本
UI2 版本
迁移清单
每次组件迁移都使用此清单:
规划阶段
实施阶段
弃用阶段
采用阶段
常见迁移模式
从 CSS 到 Styled Components
从类名到属性
从固定值到主题值
破坏性变更
有时需要破坏性变更。请谨慎处理:
何时可接受破坏性变更
安全修复
严重漏洞
主版本更新
移除已弃用功能(附带通知)
如何处理破坏性变更
尽早宣布 - 提前充分传达变更
提供迁移路径 - 记录如何更新
版本升级 - 遵循语义化版本控制
弃用期 - 留出迁移时间
代码转换工具 - 如果可能,提供自动化迁移工具
示例:移除已弃用的属性
测试迁移
确保迁移后的组件正常工作:
视觉回归测试
以视觉方式比较 UI1 和 UI2 组件:
行为测试
确保属性的工作方式相同:
文档更新
迁移后,更新文档:
更新 UI1 组件文档
创建 UI2 组件文档
下一步
最后更新于