本工具包包含 3 个辅助脚本和 1 个详细检查清单,帮助你高效完成迁移工作。
migration-tools/
├── migration-checklist.md # 📋 迁移检查清单(主文档)
├── scan-api-diff.js # 🔍 API 差异扫描器
├── import-replace.js # 🔧 批量替换工具
├── component-template.js # 📝 组件模板生成器
└── USAGE.md # 📖 本使用指南
先了解你的代码中有哪些需要修改的地方:
# 扫描旧项目代码,生成报告
node scan-api-diff.js /path/to/old-project/src
# 导出详细的 JSON 报告(可选)
node scan-api-diff.js /path/to/old-project/src --json=scan-report.json
输出示例:
📊 Ant Design v4 → v6 API 差异扫描报告
===============================================================================
📁 扫描统计:
总文件数: 581
已扫描: 581
有问题的文件: 127
🚨 问题统计:
🔴 Critical: 5 个
🟠 High: 43 个
🟡 Medium: 89 个
🟢 Low: 12 个
📋 详细问题列表:
...
对于可以自动替换的 API(如 visible → open),使用批量替换工具:
# 预览将要修改的内容(强烈推荐先预览)
node import-replace.js /path/to/new-project/src --dry-run
# 确认无误后,执行替换并备份
node import-replace.js /path/to/new-project/src --backup
# 如果你很确定,可以直接替换(不推荐)
node import-replace.js /path/to/new-project/src
该工具会自动处理:
visible → openonVisibleChange → onOpenChangemoment → dayjsoverlay → menu (Dropdown)BackTop → FloatButton.BackTop在新项目中创建符合 v6 规范的组件:
# 生成基础组件
node component-template.js basic UserCard ./src/components/user
# 生成表单组件
node component-template.js form UserForm ./src/components/user
# 生成 ProTable 组件
node component-template.js proTable UserList ./src/components/user
# 生成完整的主题系统(重要!)
node component-template.js --theme ./src/theme
打开 migration-checklist.md,按照清单逐个完成迁移任务。
扫描代码中使用的 antd v4 API,标记需要修改的地方。
# 基础用法
node scan-api-diff.js <目标目录>
# 导出 JSON 报告
node scan-api-diff.js <目标目录> --json=<输出文件.json>
# 示例 1: 扫描整个 src 目录
node scan-api-diff.js ../old-project/src
# 示例 2: 只扫描特定模块
node scan-api-diff.js ../old-project/src/components/general
# 示例 3: 导出报告后用其他工具分析
node scan-api-diff.js ../old-project/src --json=report.json
cat report.json | jq '.issues | length' # 统计问题数量
报告会按严重程度分类问题:
🔴 Critical - 必须立即修改,否则代码无法运行
getFieldDecorator
🟠 High - 高优先级,会导致功能异常
visible 属性不再生效
🟡 Medium - 中优先级,可能导致警告或不推荐的用法
message.success() 需要包裹 <App>
🟢 Low - 低优先级,建议优化
BackTop 组件有更好的替代方案如果使用 --json 参数,会生成 JSON 格式的详细报告:
{
"timestamp": "2026-02-14T10:30:00.000Z",
"stats": {
"totalFiles": 581,
"scannedFiles": 581,
"filesWithIssues": 127,
"issues": {
"critical": 5,
"high": 43,
"medium": 89,
"low": 12
}
},
"issues": {
"src/components/general/ThemeSelect.tsx": [
{
"line": 42,
"column": 8,
"code": "visible={true}",
"suggestion": "❌ 使用了 visible 属性",
"fix": "将 visible 改为 open",
"severity": "high",
"component": "Modal/Drawer/Popover/Tooltip/Dropdown"
}
]
}
}
自动替换代码中的 antd v4 API 调用。
该工具会直接修改你的代码文件!
请务必:
--dry-run 预览--backup 备份原文件# 预览模式(强烈推荐先运行)
node import-replace.js <目标目录> --dry-run
# 执行替换并备份
node import-replace.js <目标目录> --backup
# 直接替换(谨慎使用)
node import-replace.js <目标目录>
# 示例 1: 先预览整个项目的修改
node import-replace.js ./src --dry-run
# 示例 2: 确认无误后执行替换,并备份原文件
node import-replace.js ./src --backup
# 示例 3: 只处理特定目录
node import-replace.js ./src/components/general --backup
# 示例 4: 查看备份文件
find ./src -name "*.bak" | head -5
# 示例 5: 如果替换有问题,恢复备份
find ./src -name "*.bak" -exec bash -c 'mv "$0" "${0%.bak}"' {} \;
目前支持以下自动替换:
| v4 API | v6 API | 说明 |
|---|---|---|
visible={...} |
open={...} |
Modal/Drawer/Popover 等 |
onVisibleChange={...} |
onOpenChange={...} |
同上 |
import moment from 'moment' |
import dayjs from 'dayjs' |
DatePicker 相关 |
moment(...) |
dayjs(...) |
日期处理函数 |
overlay={...} |
menu={...} |
Dropdown 组件 |
<BackTop> |
<FloatButton.BackTop> |
返回顶部组件 |
⚠️ 以下情况需要手动处理:
Dropdown 的 menu 属性
menu 需要返回 Menu 组件message/notification 静态方法
<App> 组件)App.useApp() hookModal.confirm 等静态方法
Modal.useModal() hookPageHeader 组件
@ant-design/pro-components生成符合 v6 最佳实践的组件模板代码。
| 类型 | 说明 | 适用场景 |
|---|---|---|
basic |
基础组件 | 简单的展示组件 |
form |
表单组件 | 包含表单验证、提交逻辑 |
modal |
Modal 组件 | 弹窗组件 |
table |
Table 组件 | 列表展示、分页 |
proTable |
ProTable 组件 | 复杂的表格,带搜索、筛选 |
# 生成组件
node component-template.js <类型> <组件名> [输出目录]
# 生成主题系统文件(特殊命令)
node component-template.js --theme [输出目录]
# 查看帮助
node component-template.js --help
# 示例 1: 生成基础组件
node component-template.js basic UserCard ./src/components/user
# 输出: ./src/components/user/UserCard.tsx
# 示例 2: 生成表单组件
node component-template.js form UserForm ./src/components/user
# 输出: ./src/components/user/UserForm.tsx
# 示例 3: 生成 ProTable 组件
node component-template.js proTable UserList ./src/components/user
# 输出: ./src/components/user/UserList.tsx
# 示例 4: 生成主题系统(重要!)
node component-template.js --theme ./src/theme
# 输出:
# ./src/theme/ThemeSwitch.tsx (主题切换器)
# ./src/theme/AppProvider.tsx (App 提供者)
# ./src/theme/tokens.ts (Design Token 配置)
使用 --theme 命令会生成完整的主题系统:
// 用法示例
import ThemeSwitch from './theme/ThemeSwitch';
<ThemeSwitch onChange={(mode) => {
console.log('当前主题:', mode); // 'light' | 'dark'
}} />
功能:
// 在根组件使用
import AppProvider from './theme/AppProvider';
function Root() {
return (
<AppProvider>
<YourApp />
</AppProvider>
);
}
功能:
// 自定义主题 Token
export const lightTheme = {
token: {
colorPrimary: '#1890ff',
borderRadius: 6,
// ...
},
components: {
Button: {
controlHeight: 32,
},
},
};
详细的分阶段迁移任务清单。
[ ] → [x]📊 迁移进度总览
└── 总体进度追踪
🎯 Phase 1: 基础设施层
└── 类型定义、Redux、路由
🎯 Phase 2: 通用组件层 ⭐ 当前优先级
└── general、auth、api
🎯 Phase 3: 业务组件层
└── 按模块逐个迁移
🎯 Phase 4: 样式和主题系统 ⚠️ 重大变更
└── CSS → Design Token
🎯 Phase 5: 测试和优化
└── 功能测试、性能优化
📚 关键 API 变更速查表
└── 常用组件对照表
🔧 常见问题和解决方案
└── 错误处理指南
# Step 1: 扫描旧项目,评估工作量
node scan-api-diff.js ../old-project/src --json=scan-report.json
# Step 2: 生成主题系统文件
node component-template.js --theme ./src/theme
# Step 3: 配置根组件使用 AppProvider
# (手动修改 src/index.tsx)
# Step 4: 选择一个简单模块开始迁移(如 general)
# 方式 A: 手动迁移(更安全)
cp -r ../old-project/src/components/general ./src/components/
# 方式 B: 复制后使用替换工具
node import-replace.js ./src/components/general --backup
# Step 5: 测试该模块是否正常工作
# Step 6: 重复 Step 4-5,逐个模块迁移
# Step 7: 最后扫描一次,确保没有遗漏
node scan-api-diff.js ./src
# Step 1: 直接复制所有代码到新项目
cp -r ../old-project/src/* ./src/
# Step 2: 批量替换简单的 API
node import-replace.js ./src --dry-run # 先预览
node import-replace.js ./src --backup # 执行替换
# Step 3: 生成主题系统
node component-template.js --theme ./src/theme
# Step 4: 扫描剩余问题
node scan-api-diff.js ./src
# Step 5: 根据报告手动修复剩余问题
# Step 6: 测试所有功能
A: 可能会。所以:
--dry-run 预览--backup 备份A: 分优先级处理:
A: 手动处理:
migration-checklist.md 中的 API 对照表A: 三步走:
# 1. 生成主题文件
node component-template.js --theme ./src/theme
# 2. 在根组件引入
import AppProvider from './theme/AppProvider';
# 3. 包裹你的 App
<AppProvider>
<App />
</AppProvider>
A:
component-template.js proTable 生成新模板A: 检查:
classNames APIA:
scan-api-diff.js 添加新规则不要一次性迁移所有代码,按模块逐个迁移并测试。
在迁移期间,保持 v4 版本可运行,方便对比。
在 migration-checklist.md 中记录遇到的问题和解决方案。
迁移后的代码要经过审查,确保符合 v6 最佳实践。
迁移前后对比性能指标,确保没有性能退化。
如果是生产项目,建议采用灰度发布策略。
当你完成迁移后,检查以下项目:
祝你迁移顺利!🚀
如有问题,请参考 migration-checklist.md 或查阅官方文档。