将 Vue 2 项目升级到 Vue 3 的过程中,需要重点关注以下几个难点和关键点:
建议小项目直接用vue3重写更快,bug更少
文章目录
- 1. **Composition API 的学习与应用**
- 2. **全局 API 的变更**
- 3. **模板语法的兼容性变化**
- 4. **组件选项和生命周期的变化**
- 5. **插件和第三方库的兼容性**
- 6. **构建工具与依赖项的升级**
- 7. **响应式系统的底层变化**
- 8. **测试与调试迁移**
- 9. **性能优化和打包体积**
1. Composition API 的学习与应用
- Vue 3 引入了 Composition API,与 Vue 2 的 Options API 风格截然不同。
- 难点在于其不仅仅是语法变化,而是一种全新的组织逻辑和代码复用方式。
- 开发者需熟悉
setup()
、ref
、reactive
、watch
、computed
等 API 的使用。
2. 全局 API 的变更
- Vue 3 中部分 Vue 2 的全局 API 被弃用或更改,例如:
Vue.extend
现在仅用于定义组件。Vue.nextTick()
现在为nextTick()
(需从vue
模块导入)。Vue.set
已被弃用,因为响应式系统已基于 Proxy/Reflect 实现。
3. 模板语法的兼容性变化
- 自定义指令的钩子函数命名变化(如
bind
→beforeMount
)。 - 渲染函数和 JSX 的变化,例如组件不再自动注入
h
(createElement
)。 - 模板中不再支持非-prop 的 attribute 自动绑定到根元素。
4. 组件选项和生命周期的变化
- 生命周期钩子命名变化(如
beforeCreate
→beforeUnmount
)。 destroyed
→unmounted
,beforeDestroy
→beforeUnmount
。- 不再支持异步组件的
resolve
和reject
回调写法。
5. 插件和第三方库的兼容性
- 很多 Vue 2 插件尚未完全支持 Vue 3,可能需要寻找替代方案或等待更新。
- 如
element-ui
需要升级为支持 Vue 3 的element-plus
。 vue-router
、vuex
也需要使用 Vue 3 兼容版本(如vue-router@4
、vuex@4
)。
6. 构建工具与依赖项的升级
- 构建工具如 Webpack/Vite 配置可能需要调整。
- 需要更新项目依赖项版本,确保兼容 Vue 3。
- 删除 Vue 2 的编译依赖,替换为 Vue 3 的相关依赖。
7. 响应式系统的底层变化
- Vue 3 使用
Proxy
替代Object.defineProperty
,因此某些 Vue 2 的响应式写法可能不再适用。 - 如直接索引修改数组或修改对象长度,不会触发更新。
8. 测试与调试迁移
- 单元测试框架(如 Vue Test Utils)需升级为 Vue 3 兼容版本。
- 测试用例可能需要重写以适配新的 API 和生命周期。
9. 性能优化和打包体积
- Vue 3 默认使用
createApp
,按需引入组件可显著减少打包体积。 - 需重新评估项目的性能瓶颈并优化。
建议:
- 使用 Vue 3 的官方迁移指南 和 Vue 2 到 Vue 3 迁移插件 辅助升级。
- 分阶段进行迁移,先升级基础依赖和构建配置,再逐步重写组件逻辑。