Vue2 到 Vue3 Element Plus 迁移手册
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_83701b84/vue2-vue3-element-plus-migration。
技能介绍
要解决的迁移痛点
Vue 2 + Element UI 项目向 Vue 3 + Vite + Element Plus 迁移时,会遇到三类典型问题:编译期直接崩溃(如模板中的 this. 导致白屏、<style> 无 lang 时使用 // 注释、Vite/ESM 环境下 require() 未定义)、运行时行为不一致(如 slot-scope 废弃、.sync 修饰符移除、$listeners 和 $vnode 不存在、el-dialog 受控约定变化导致弹框关不掉、el-date-picker 的 value-format 大小写敏感)、API 语义变更(如 el-table 选区改用 getSelectionRows()、el-select 包装组件传参 bug、size="mini" 改为 small、this.$set 移除)。这些问题散落在模板、脚本、样式和第三方组件中,靠人工逐个排查容易遗漏。
技能的核心能力
本手册提供自包含、可独立分享的迁移方案,核心流程分三步:
- 全量扫描建立清单:在
src/根目录执行一组grep命令,定位所有命中文件,包括slot-scope、this.、//注释、require(、.sync、$listeners、$vnode、mini等关键词。注意kebab-case标签与PascalCase导入名不会同时命中,需补充扫描OrganizationSelect|EmpSelect|ProductSupplierSelect等包装组件,避免漏掉死import。 - 按优先级分批修复:先修会崩/白屏的硬伤(P1-P7、P15),再修组件 API 与数据绑定(P8-P14、P16-P23)。例如
slot-scope改为v-slot、.sync改为v-model:prop、模板里的this.xxx直接写xxx、require()改为import、el-date-picker的value-format用大写YYYY-MM-DD、自定义el-select包装组件替换为原生el-select+ 本地数据数组并删除死import。 - 验证清单逐项确认:每改完一批,用 Playwright 或浏览器打开关键页面,确认控制台零报错(无
ReferenceError: require is not defined、this.$vnode is undefined、slot-scope编译错误)、弹框取消/提交能正常关闭、下拉框宽度不塌陷且传参正确、表格多选和日期选择回显与传参格式正确。
适用边界与注意点
本手册适用于从 Vue 2 + Element UI(webpack / Vue CLI)迁移到 Vue 3 + Vite + Element Plus 的项目,尤其适合排查迁移后运行时问题(白屏、弹框不关闭、下拉框宽度异常或传参错误、控制台报错)和对已迁移代码做坑点审计。不适用于 Vue 2 到 Vue 3 但未使用 Element UI/Plus 的场景,也不覆盖路由守卫、状态管理、CSS 预处理器升级等与 Element Plus 无关的迁移问题。
迁移时遵循三个原则:
- 先扫后改,分批进行:不要一次全改完再验证,每批改完抽几个页面本地
npm run dev验证。 - 只处理明确点名的三类包装组件:不要改动项目里其它仍在用的
ElementSelect包装组件(Team/ProductionLine/Machine/Company等)。 - 文档陈述必须以代码为准:合并文档时先用
grep核实代码真实状态,尤其"已修复"类断言。
使用场景
- 维护 Vue 2 + Element UI 老项目,准备升级到 Vue 3 + Vite + Element Plus 技术栈
- 迁移后页面出现白屏或弹框无法关闭,需要按手册排查 `slot-scope`、`this.`、`el-dialog` v-model 等具体问题
- 将自定义 `EmpSelect` 包装组件替换为原生 `el-select`,需要保留联动逻辑并修正向后端传参
- 迁移后做代码评审,核对文档中"已修复"断言与实际代码是否一致,清理死 import 和过时配置
适合人员
- Vue 2 项目前端工程师,负责将 Element UI 老代码升级到 Vue 3 + Element Plus
- 技术团队负责人,需要审核迁移方案并制定分批修复与验证计划
- 前端开发实习生,在导师指导下排查迁移后出现的白屏、弹框不关闭等运行时问题
- 开源项目维护者,需要为社区用户编写并更新 Vue 2 到 Vue 3 的迁移文档