老旧项目迁移到 vue 3 的关键是可控分层:先用 @vue/compat 兜底运行,再通过 vue-codemod 自动化转换语法与 api,渐进式重构非核心模块,最后移除兼容层切换为纯 vue 3。

老旧项目平滑迁移到 Vue 3,关键不在“一步到位”,而在“可控分层”——用兼容层兜底、自动化工具减负、模块化推进验证。直接替换 vue@2 为 vue@3 并不可行,必须借助迁移构建版本 + codemod 工具 + 双模环境协同发力。
启用 @vue/compat 迁移构建版本,先跑起来再升级
这是老旧项目最稳妥的起点。它不是最终目标,而是运行时“翻译器”:Vue 3 内核 + Vue 2 行为语义,所有废弃 API(如 $on/$off/$emit、filters、beforeDestroy)调用会触发控制台警告,但不中断执行。
- 安装迁移构建:
npm install vue@next @vue/compat - 在入口文件(如 main.js)中替换 import:
import { createApp } from 'vue'→import { createApp } from '@vue/compat' - 启用严格模式(可选):在 createApp 后添加
app.config.compatConfig = { MODE: 2 },让警告更密集,暴露更多潜在问题 - 注意限制:IE11 不支持;Vuetify/Element UI 等老 UI 库需确认已发布 Vue 3 版本,否则可能报 VNode 私有属性错误
用 vue-codemod 批量处理语法与 API 层级变更
人工改 Vue.extend、new Vue()、Vue.set 等是低效且易漏的。vue-codemod 基于 AST 分析,精准识别并转换,覆盖 90% 以上基础重构场景。

