代理迁移指南 - 完整迁移
AI 助手的完整迁移指南,帮助将 HeroUI v2 迁移到 v3
概述
本指南专为人工智能助手(代理)设计,帮助用户从 HeroUI v2 迁移到 v3。它实现了完整迁移方法,首先分析项目并以可管理的批次迁移组件,而不是一次性迁移全部组件。
关键约束:HeroUI v2 和 v3 不应在同一项目中共存。该项目将在迁移过程中被破坏。始终在功能分支中工作并在切换依赖项之前迁移所有组件代码。
关键原则
- 完整迁移:不要试图在一次改动中迁移所有组件;应按可管理的批次推进。大型项目同样需要采用完整迁移流程(在切换依赖前完成全部组件适配)。
- 首先进行项目分析:在创建迁移计划之前,始终分析代码库以了解组件的使用情况。
- 损坏的状态管理: 严重:项目将在迁移过程中损坏。为此制定计划:
- 在功能分支中迁移
- 在切换依赖项之前准备好所有代码更改
- 制定回滚计划
- 首先在隔离环境中进行测试
- 全有或全无依赖关系切换:依赖关系更新到 v3 后,必须迁移所有组件。在切换依赖关系之前规划组件迁移。
v3 的主要变化
- 依赖项:将 React 升级到 v19+、HeroUI 包升级到 v3、Tailwind CSS 升级到 v4,并移除 Framer Motion
- 无需 Provider:v3 不再需要
HeroUIProvider - 组件 API 更新:许多组件改用 React Aria Components 模式
- 复合组件:全新的复合组件模式带来了更好的定制能力。详情请参阅各组件的迁移指南。
- 已移除的 Hooks:v2 中的组件 Hooks(如
useSwitch、useInput)已被移除——请改用复合组件。useDisclosure已被替换为useOverlayState。详情请参阅 Hooks 迁移指南。 - 配置变更:从 Tailwind 配置中移除
heroui()插件,更新 CSS 导入,并删除hero.ts文件 - 条目标识:集合类组件(Dropdown、ListBox、Select、Accordion 等)在 v3 中改用
id和textValue;列表本身仍需保留 React 的key。
详细迁移步骤
有关详细的分步说明,请参阅完整迁移指南。该指南涵盖:
- 依赖项更新
- 主题配置更改
- 删除 HeroUIProvider
- 组件导入和迁移
- 钩子迁移
- 样式迁移
- 测试
代理注意:依赖项更新(React 19、Tailwind v4)可以在切换 HeroUI 之前完成(不会破坏项目)。但是,HeroUI 包切换只能在所有组件代码迁移之后进行。
钩子迁移
HeroUI v2 提供了组件挂钩(例如useSwitch, useInput, useCheckbox等)和实用程序挂钩,例如useDisclosure。 HeroUI v3 删除了大多数组件挂钩,转而使用复合组件,并替换了useDisclosure和useOverlayState.
何时迁移钩子:
- 组件迁移期间:替换组件钩子(
useSwitch,useInput等)当您迁移每个组件以使用复合组件时 - 组件迁移后:迁移
useDisclosure→useOverlayState用于样式迁移之前的覆盖状态管理
迁移策略:
- 识别钩子用法:搜索代码库以从以下位置导入
@heroui/react包括钩子名称(useSwitch,useInput,useCheckbox,useRadio,useDisclosure, ETC。) - 替换组件钩子:使用复合组件而不是带有 prop getter 的钩子(在组件迁移期间完成)
- 替换 useDisclosure:迁移到
useOverlayState用于覆盖状态管理(使用get_hooks_migration_guideMCP 工具) - 参考指南:使用
get_hooks_migration_guide用于钩子迁移的 MCP 工具,get_component_migration_guides特定于组件的指南
组件导入更改
请参阅完整迁移指南了解详细的组件导入更改。
组件迁移参考
可以通过下表快速查找每个组件的迁移指南。点击「迁移指南」列中的链接,即可跳转到对应的详细迁移说明。
组件开发状态:标有 🔄 进行中或 📋 计划中的组件仍在开发中。可以查看路线图了解任务状态。这些组件的迁移指南将在开发完成后提供。
| v2 组件 | v3 组件 | 状态 | 迁移指南 |
|---|---|---|---|
| Accordion | Accordion | ✅ 可用 | 查看指南 → |
| Alert | Alert | ✅ 可用 | 查看指南 → |
| Autocomplete | ComboBox | ✅ 已重命名 | 查看指南 → |
| Avatar | Avatar | ✅ 可用 | 查看指南 → |
| Badge | Badge | ✅ 可用 | 查看指南 → |
| Breadcrumbs | Breadcrumbs | ✅ 可用 | 查看指南 → |
| Button | Button | ✅ 可用 | 查看指南 → |
| ButtonGroup | ButtonGroup | ✅ 可用 | 查看指南 → |
| Calendar | Calendar | ✅ 可用 | 查看指南 → |
| Card | Card | ✅ 可用 | 查看指南 → |
| Checkbox | Checkbox | ✅ 可用 | 查看指南 → |
| CheckboxGroup | CheckboxGroup | ✅ 可用 | 查看指南 → |
| Chip | Chip | ✅ 可用 | 查看指南 → |
| Code | ❌ | ❌ 已移除 | 查看指南 → |
| DateInput | DateField | ✅ 已重命名 | 查看指南 → |
| DatePicker | DatePicker | ✅ 可用 | 查看指南 → |
| DateRangePicker | DateRangePicker | ✅ 可用 | 查看指南 → |
| TimeInput | TimeField | ✅ 已重命名 | 查看指南 → |
| Divider | Separator | ✅ 已重命名 | 查看指南 → |
| Drawer | Drawer | ✅ 可用 | 查看指南 → |
| Dropdown | Dropdown | ✅ 可用 | 查看指南 → |
| Form | Form | ✅ 可用 | 查看指南 → |
| Image | ❌ | ❌ 已移除 | 查看指南 → |
| Input | TextField、Input、InputGroup | ✅ 可用 | 查看指南 → |
| InputOTP | InputOTP | ✅ 可用 | 查看指南 → |
| Kbd | Kbd | ✅ 可用 | 查看指南 → |
| Link | Link | ✅ 可用 | 查看指南 → |
| Listbox | ListBox | ✅ 可用 | 查看指南 → |
| Modal | Modal | ✅ 可用 | 查看指南 → |
| Navbar | ❌ | ❌ 已移除 | 查看指南 → |
| NumberInput | NumberField | ✅ 已重命名 | 查看指南 → |
| Pagination | Pagination | ✅ 可用 | 查看指南 → |
| Popover | Popover | ✅ 可用 | 查看指南 → |
| Progress | ProgressBar | ✅ 已重命名 | 查看指南 → |
| CircularProgress | ProgressCircle | ✅ 已重命名 | 查看指南 → |
| Radio | Radio | ✅ 可用 | 查看指南 → |
| RadioGroup | RadioGroup | ✅ 可用 | 查看指南 → |
| RangeCalendar | RangeCalendar | ✅ 可用 | 查看指南 → |
| Ripple | ❌ | ❌ 已移除 | 参见 Button 的水波纹效果 → |
| ScrollShadow | ScrollShadow | ✅ 可用 | 查看指南 → |
| Select | Select | ✅ 可用 | 查看指南 → |
| Skeleton | Skeleton | ✅ 可用 | 查看指南 → |
| Slider | Slider | ✅ 可用 | 查看指南 → |
| Snippet | ❌ | ❌ 已移除 | 查看指南 → |
| Spacer | ❌ | ❌ 已移除 | 查看指南 → |
| Spinner | Spinner | ✅ 可用 | 查看指南 → |
| Switch | Switch | ✅ 可用 | 查看指南 → |
| Table | Table | ✅ 可用 | 查看指南 → |
| Tabs | Tabs | ✅ 可用 | 查看指南 → |
| Toast | Toast | ✅ 可用 | 查看指南 → |
| Tooltip | Tooltip | ✅ 可用 | 查看指南 → |
| User | ❌ | ❌ 已移除 | 查看指南 → |
已删除/进行中/计划的组件:对于标记为 ❌ 已删除、🔄 进行中或 📋 计划的组件,请在迁移过程中将其替换为标准 HTML 元素。一旦 HeroUI 组件在 v3 中可用,您就可以迁移回它们。
使用get_component_migration_guidesMCP 工具可获取每个组件的详细指南。
v3 中的新组件
v3 引入了一系列 v2 中尚未提供的全新组件:
| 组件 | 用途 | 文档 |
|---|---|---|
| TextField | 增强型文本输入框,支持 label 与 description | 查看文档 → |
| TextArea | 多行文本输入组件 | 查看文档 → |
| AlertDialog | 用于确认与提醒的模态对话框 | 查看文档 → |
| Label | 无障碍的表单标签组件 | 查看文档 → |
| Description | 表单字段的辅助说明文本 | 查看文档 → |
| FieldError | 表单字段的错误信息显示 | 查看文档 → |
| Fieldset | 对相关表单字段进行分组 | 查看文档 → |
| InputGroup | 将多个输入框组合在一起 | 查看文档 → |
| Surface | 带有层级样式的容器组件 | 查看文档 → |
| Disclosure | 可展开 / 可折叠的内容区域 | 查看文档 → |
| DisclosureGroup | 用于管理多个 Disclosure 区域的复合组件 | 查看文档 → |
| SearchField | 带清除按钮与可选加载状态的搜索输入框 | 查看文档 → |
| DateField | 配合日历选择器的日期输入框 | 查看文档 → |
| TimeField | 时间输入组件 | 查看文档 → |
| Tag、TagGroup | 用于选择或展示的 Tag 与 TagGroup | 查看文档 → |
| ColorPicker | 颜色选择(ColorArea、ColorField、ColorSlider、ColorSwatch、ColorSwatchPicker) | 查看文档 → |
| CloseButton | 用于关闭或解除浮层的触发按钮 | 查看文档 → |
| ErrorMessage | 表单字段错误信息展示(基于 React Aria 集成) | 查看文档 → |
自定义主题覆盖
请参阅完整迁移指南用于自定义主题覆盖迁移。
样式迁移
请参阅完整迁移指南有关详细的样式迁移说明。
代理注意:使用get_styling_migration_guide用于全面样式迁移详细信息的 MCP 工具。
重要:样式迁移发生在组件迁移和依赖关系切换之后。
完整的迁移工作流程
重要:由于 v2 和 v3 无法共存,因此迁移分两个主要阶段进行:
- 准备阶段:迁移所有组件代码,同时仍依赖 v2 依赖项(代码将被破坏)
- 切换阶段:将依赖项更新到 v3 并修复任何剩余问题
⚠️ 关键:不要构建来检查迁移过程中的错误
- 使用类型检查(例如,
tsc --noEmit) 如果可以检查 TypeScript 错误 - 使用lint(例如,
eslint,biome check) 如果可以检查代码质量 - 不要运行构建命令(例如,
npm run build,next build,vite build) - 请勿 在迁移期间尝试启动/运行项目
第 0 阶段:设置和分析
-
创建迁移分支
- 创建一个功能分支用于迁移工作
- 例子:
git checkout -b migrate/heroui-v3
-
验证迁移 MCP 是否已配置
- 检查迁移 MCP 服务器是否已连接
- 确保
heroui-reactMCP 未连接(以避免混淆) - 验证 MCP 工具可用
-
分析项目并创建迁移计划
- 使用
get_migration_workflow获取本指南 - 扫描 HeroUI v2 导入,识别所有组件和使用情况
- 映射组件依赖关系
- 创建分阶段迁移计划(例如,每个阶段 3-5 个组件,按依赖项策略)
- 使用
第 1 阶段:依赖项准备(代码更改之前)
这些步骤可以在切换 HeroUI 依赖项之前完成,并且不会破坏项目:
-
将 React 更新到 v19(如果还没有)
- 这可以在切换 HeroUI 之前完成
-
将 Tailwind CSS 更新至 v4(如果尚未更新)
- 这可以在切换 HeroUI 之前完成
-
🛑 检查点:停止并等待用户批准
- 不要自动进入下一阶段
- 解释配置更改
- 在继续之前等待明确的用户批准
第 2-N 阶段:代码迁移(v2 依赖项仍然有效)
关键:在此阶段,代码将引用 v3 API,但仍安装 v2 依赖项。该项目将被破坏。这是预期的且正常的。
对于迁移计划中的每个组件组:
-
获取特定于组件的指南
- 使用
get_component_migration_guides适用于每个组件的 MCP 工具 - 审查 API 更改、prop 迁移、结构更改
- 使用
-
应用代码迁移
- 将组件代码迁移到 v3 API 模式
- 更新导入、道具、组件结构
- 注意:在切换依赖关系之前,代码将被破坏
-
处理依赖关系
- 如果组件有依赖,先迁移依赖
- 检查依赖项是否已经迁移
- 根据需要迁移共享代码
-
🛑 检查点:停止并等待用户批准
- 不要自动进入下一阶段
- 总结一下本阶段迁移的内容
- 在继续之前等待明确的用户批准
-
记录迁移状态
- 跟踪哪些组件已迁移
- 注意任何问题或疑虑
最终阶段:依赖关系切换和修复
关键:仅当所有组件都已迁移到 v3 API 模式时才继续。
-
更新依赖关系
- 消除
@heroui/react和@heroui/theme(v2) - 安装
@heroui/react和@heroui/styles(v3) - 消除
framer-motion如果存在 - 更新 CSS 导入(添加
@import "@heroui/styles";) - 从应用程序根目录中删除 HeroUIProvider
- 更新 Tailwind 配置(删除
heroui()插件)
- 消除
-
修复剩余问题
- 运行 typecheck/lint(如果可用)(不构建)
- 修复类型检查报告的任何 TypeScript 错误
- 修复任何 linting 错误
- 注意:请勿在迁移期间尝试构建或运行项目
-
🛑 检查点:停止并等待用户批准
- 不要自动进行样式设置
- 验证组件是否正常工作
- 在样式迁移之前等待明确的用户批准
-
继续样式迁移
- 使用
get_styling_migration_guideMCP 工具获取样式迁移指南 - 系统地应用样式更新
- 使用
-
应用样式更新
- 使用
get_styling_migration_guideMCP工具 - 更新实用程序类、颜色标记、CSS 变量
- 测试视觉外观
- 使用
-
最终验证
- 最后运行一次类型检查/lint(不构建)
- 验证所有样式是否正确更新
- 注意:完整测试(视觉、功能、可访问性)应在迁移完成后完成,而不是在迁移期间完成
迁移策略
策略 1:按依赖关系(推荐)
- 首先迁移基础组件(按钮、输入、卡等)
- 然后迁移依赖它们的组件
- 最适合具有复杂组件层次结构的项目
- 确保依赖项先于依赖项准备就绪
订单示例:
- 按钮、输入、链接(基础)
- 卡片、模态(使用按钮)
- 表单、下拉菜单(使用输入、按钮)
- 复杂组件(使用多个依赖项)
策略 2:按功能
- 将功能/模块中的所有组件迁移到一起
- 适合基于功能的代码组织
- 允许逐个功能测试
- 可能需要先迁移依赖项
例子:
- 功能:用户身份验证
- 迁移:输入、按钮、表单、模态(所有与身份验证相关)
- 功能:仪表板
- 迁移:卡、选项卡、选择(所有与仪表板相关)
策略 3:按频率
- 首先迁移最常用的组件
- 提供快速获胜和早期验证
- 适合具有清晰使用模式的大型代码库
- 仍然需要处理依赖关系
例子:
- 按钮(使用150次)
- 输入(使用120次)
- 卡(已使用80次)
- ...(按使用次数继续)
代理最佳实践
-
关于损坏状态的警告
- 始终通知用户项目在迁移过程中将被破坏
- 推荐使用功能分支
- 设定项目何时再次运作的预期
-
切换依赖项之前迁移所有代码
- 首先完成所有组件代码迁移
- 仅当迁移所有组件时才切换依赖项
- 这最大限度地减少了破坏状态的持续时间
-
每个阶段使用 MCP 工具
- 使用
get_migration_workflow,get_component_migration_guides,get_styling_migration_guide根据需要 - 关键:始终在检查点停止并等待阶段之间的用户批准
- 使用
-
在功能分支工作
- 始终建议创建迁移分支
- 允许用户继续在主分支上工作
- 如果需要,启用轻松回滚
-
记录迁移状态
- 跟踪哪些组件已迁移
- 注意任何问题或疑虑
- 保持清单可见
- 每个阶段后更新状态
-
优雅地处理错误
- 如果组件迁移失败,请记录原因
- 继续其他组件
- 依赖切换后返回失败的组件
- 更新依赖项后,某些问题可能会得到解决
-
依赖关系切换后验证
- 仅在依赖项更新到 v3 后
- 运行类型检查/lint(不构建)
- 修复出现的类型/lint 错误
- 在类型检查/lint 通过之前不要继续进行样式设置
常见场景
大型项目(100 多个组件)
- 使用较小的批量(3-5 个组件)
- 按依赖性或频率确定优先级
- 允许多个会话
- 在阶段之间创建检查点
- 使用“按依赖”策略
- 清楚地记录进度
小型项目(<20 个组件)
- 可以使用更大的批次(5-10 个组件)
- 可以通过更少的阶段完成
- 仍然增量验证(全迁移方式)
- 可以使用任何策略
- 在切换 deps 之前仍然需要迁移所有代码
混合 v2/v3 使用(完全迁移)
- 完全迁移中不可能:v2 和 v3 不能在完全迁移方法中共存
- 在切换依赖关系之前必须迁移所有组件
- 使用功能分支来维护工作主分支
- 一次性完成迁移
下一步
完成迁移后:
- 删除 v2 依赖项(已在依赖切换步骤中完成)
- 从迁移 MCP 切换到用于 v3 开发的
heroui-reactMCP - 更新文档中的引用
- 运行最终验证
- 将迁移分支合并回主分支
本代理迁移指南旨在与迁移 MCP 服务器配合使用。在开始迁移之前,请确保 MCP 服务器已正确配置并且工具可用。