Proxy,对IE11以下的版本存在兼容性问题通过工具+手动
先把Vue2框架整体升级到Vue3,由于Vue3也兼容Option Api,因此代码结构可以暂时不用调整,之后再改为官方推荐的Composition Api
升级Vue相关的依赖,Vue/Vuex/Vue-router/Vue 编译工具
把 Vue3 中已经不再支持的 API 和语法进行修改替换。例如已不再支持的过滤器filter,v-model 用法也改变等。
将第三方组件库、插件等依赖升级到适配Vue3的版本
确保项目代码语法编译无误后,需要检查代码中的业务逻辑是否正确,以保证项目能完整运行。
使用 TypeScript 重构 JS 代码,TypeScript 比 JavaScript 多了静态类型检查,也增加了一些新的语法,是给项目锦上添花。但是这一步会比较耗时(因为相当于修改把JS代码都要过一遍),但是项目中可以同时存在JS 和 TS,所以可以逐步替换。
通过开源工具gogocode 文档,可以进行上述步骤一二三的转换。
ps:对于工具改造代码,存在很多未知性,项目业务代码中有些比较复杂的(例如表单联动,规则校验等等)可能会对原来的逻辑有影响,需要逐一人工比对和测试。
tree-shakev-model 用法已更改,以替换 v-bind.sync 和非 v-for 节点上的 key用法已更改v-if 和 v-for 优先级已更改(v-if优先级大于v-for)v-bind=“object” 现在排序敏感v-on:event.native 修饰符已移除v-for 中的 ref 不再注册 `ref 数组functional attribute 在单文件组件 (SFC) 的 和 functional 组件选项中被废弃defineAsyncComponent 方法来创建emits 选项中声明$scopedSlots property 已移除,所有插槽都通过 $slots 作为函数暴露$listeners 被移除或整合到 $attrs$attrs 现在包含 class 和 style attributeis attribute 的使用被严格限制在被保留的 标签中destroyed 生命周期选项被重命名为 unmountedbeforeDestroy 生命周期选项被重命名为 beforeUnmountdefault prop 工厂函数不再可以访问 this 上下文binding.expression 已移除data 选项应始终被声明为一个函数mixin 的 data 选项现在为浅合并Attribute 强制策略已更改class 被重命名 不再默认渲染包裹元素 现在被视为普通元素,并将渲染 元素,而不是渲染其内部内容。hook: 事件前缀改为 vnode-keyCode 作为 v-on 修饰符的支持on、off 和 $once 实例方法attribute$children 实例 propertypropsData 选项$destroy 实例方法。用户不应再手动管理单个 Vue 组件的生命周期。set 和 delete 以及实例方法 $set 和 $delete。基于代理的变化检测已经不再需要它们了