背景介绍:
最开始使用Vue2写了一个项目,具体为汽车零件的目录,后面又使用Vue3写了一个项目,具体为汽车零件的使用手册,由于需求变更,需要让两个项目合并。
问题描述:
- 由于两个项目采用不同的技术栈,包括不同版本的Vue,导致维护和开发变得困难。这种不一致性可能导致团队之间的合作障碍,增加了代码维护的复杂性
- 由于需求的变更,两个项目中的逻辑需要进行复用,但由于技术栈不同,逻辑复用变得困难。统一技术栈可以促进逻辑的复用和整合,提高开发效率。
挑战和风险:
- Vue2与Vue3之间语法和功能拥有差异,是把Vue3的项目合并到Vue2中,还是把Vue2项目合并到Vue3中?
- 两个项目可能有使用不同的第三方库和插件
- 如何保证安稳地过度,保持项目的稳定性
技术的选型:
- 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 需要依赖共享的属性名来进行相互作用,这使得它们隐性地耦合在一起。)
- Vue3项目与Vue2项目的共同点
- Vue3项目可以使用Options Api,Vue2项目使用的是Options Api。
- Vue3项目使用的是Element的组件库,只是版本不一样
- Vue3项目与Vue项目的不同点
- 打包工具的差异
- Vue3项目使用的是vite打包,Vue2项目使用的是webpack打包
- 类型安全(Ts)
- Vue3项目使用了Ts,Vue项目未使用Ts
- 状态管理库
- Vue3项目使用的状态管理库是Pinia
- Vue2项目使用的状态管理库是Vuex
- 国际化
- Vue2和Vue3的国际化取值方式不一致
- 更好的开发体验
- 更好的开发体验,如 Composition API 和 Teleport 等,可以提高开发的效率和可维护性。
- 更好的类型支持
- Vue 3 对 TypeScript 的支持更加友好,使用 TypeScript 可以提供更好的类型检查和 代码提示,有助于减少错误并增加代码可读性。
- 更好的状态管理
- Vue 3 推荐使用 Pinia 作为状态管理库,Pinia 提供了更简洁和强大的 API,相比于 Vuex 更易于使用和维护。
- 未来的支持
- Vue 团队将更多的精力和资源投入到 Vue 3 的发展和支持上,Vue 2 的维护和更新会逐渐减少。因此,将项目迁移到 Vue 3 可以获得更好的未来支持。
- 使用最新版本的 Vue 可以获得更多社区贡献和支持。
技术选型结果:
决定把Vue2项目合并到Vue3项目中
原因: