👻

Vue2 Vue3项目合并的技术选型

背景介绍:

最开始使用Vue2写了一个项目,具体为汽车零件的目录,后面又使用Vue3写了一个项目,具体为汽车零件的使用手册,由于需求变更,需要让两个项目合并。

问题描述:

  1. 由于两个项目采用不同的技术栈,包括不同版本的Vue,导致维护和开发变得困难。这种不一致性可能导致团队之间的合作障碍,增加了代码维护的复杂性
  1. 由于需求的变更,两个项目中的逻辑需要进行复用,但由于技术栈不同,逻辑复用变得困难。统一技术栈可以促进逻辑的复用和整合,提高开发效率。

挑战和风险:

  1. Vue2与Vue3之间语法和功能拥有差异,是把Vue3的项目合并到Vue2中,还是把Vue2项目合并到Vue3中?
  1. 两个项目可能有使用不同的第三方库和插件
  1. 如何保证安稳地过度,保持项目的稳定性

技术的选型:

  1. Vue3与Vue2的差异
      • Vue3:拥有组合式API (Composition Api) 和 选项式API (Options Api),Composition Api是Vue3的核心特性之一Vue3项目中使用的是组合式API,更加简单高效的复用逻辑(Hooks),解决了minxis的所有缺陷。
      • Vue2:拥有选项式Api (Options Api),但同时Vue提供了Vue2能够使用Composition Api的方法:@vue/composition-api ,但是这是以插件形式进行安装的。逻辑复用的机制是mixins,而当有多个mixin时,将会出现缺陷(1. 当使用了多个 mixin 时,实例上的数据属性来自哪个 mixin 变得不清晰,这使追溯实现和理解组件行为变得困难 2. 多个来自不同作者的 mixin 可能会注册相同的属性名,造成命名冲突。3. 多个 mixin 需要依赖共享的属性名来进行相互作用,这使得它们隐性地耦合在一起。)
       
  1. Vue3项目与Vue2项目的共同点
      • Vue3项目可以使用Options Api,Vue2项目使用的是Options Api。
      • Vue3项目使用的是Element的组件库,只是版本不一样
       
  1. Vue3项目与Vue项目的不同点
    1. 打包工具的差异
        • Vue3项目使用的是vite打包,Vue2项目使用的是webpack打包
    2. 类型安全(Ts)
        • Vue3项目使用了Ts,Vue项目未使用Ts
    3. 状态管理库
        • Vue3项目使用的状态管理库是Pinia
        • Vue2项目使用的状态管理库是Vuex
    4. 国际化
        • Vue2和Vue3的国际化取值方式不一致
       

      技术选型结果:

      决定把Vue2项目合并到Vue3项目中
      原因:
      1. 更好的开发体验
          • 更好的开发体验,如 Composition API 和 Teleport 等,可以提高开发的效率和可维护性。
      1. 更好的类型支持
          • Vue 3 对 TypeScript 的支持更加友好,使用 TypeScript 可以提供更好的类型检查和 代码提示,有助于减少错误并增加代码可读性。
      1. 更好的状态管理
          • Vue 3 推荐使用 Pinia 作为状态管理库,Pinia 提供了更简洁和强大的 API,相比于 Vuex 更易于使用和维护。
      1. 未来的支持
          • Vue 团队将更多的精力和资源投入到 Vue 3 的发展和支持上,Vue 2 的维护和更新会逐渐减少。因此,将项目迁移到 Vue 3 可以获得更好的未来支持。
          • 使用最新版本的 Vue 可以获得更多社区贡献和支持。