如何才能让一套组件库兼容vue2和vue3?(基本思路)

前言

距离Vue3在2020年9月18日第一次发布到现在,已经过去了将近三年时间,虽然目前许许多多的新项目都开始使用vue3作为主要开发语言,但是因为旧项目比较庞大臃肿,很多的业务中项目、模块等都非常多,贸然升级的成本和风险都较高,所以公司中的许多老项目依旧是vue2的,那么如何去用同一套标准UI的组件库来兼容vue2和vue3就成了一个需要解决的问题。因为细节和代码会比较多,这里给大家提供一下最佳学习的大致的解决思路。

当然,最简单的方案实际上还是开发两套组件库,就像是Vue组件的标杆,Element ui ⇒ Element Plus。

解读2. x 和 3.x的版本

首先其实从版本特性上来说,一共我们可以分为三种情况

  1. @vue/composition-api + Vue 2 ≈ Vue 3
  2. Vue 2.7 (因为组件式API在2.7就被支持了)
  3. Vue 3.x

兼容方案

因为再去兼容传统的vue2(非2.7版)的成本和付出和收入并不成正比,所以我们指的兼容实际上是只vue2.7与vue3兼容,而且我们的兼容方案实际上是去向着vue3靠近,利用我们自己写的兼容代码去抹平vue2.7到vue3的差异。想知道具体差异可以在迁移文档中查看。

总体方案其实差不多,基本就是安装判断所在环境具体版本,使用该版本的产物。

在开发环境的组件脚手架中(编译兼容方案)

其实总体的思路都是一样的,判断所在环境具体版本,然后使用该版本的代码。

所以,首先我们要做的是需要安装两个版本的Vue以及会用到的相关插件

```bash npm i vue2@npm:vue@^2.7.14 vue3@npm:vue@^3.2.45

npm i @vitejs/plugin-vue@2.0.0 npm i @vitejs/plugin-vue2@2.2.0

npm i @vue/compiler-sfc-vue2@npm:@vue/compiler-sfc@^2.7.14 npm i @vue/compiler-sfc-vue3@npm:@vue/compiler-sfc@^3.2.45

npm i @vitejs/plugin-vue-jsx @vitejs/plugin-vue2-jsx ```

然后在vite的配置中对应需要转换和判断的部分都要进行一次vue版本判断并且去使用对应的版本,如下面的例子。

javascript resolve: { extensions: ['.ts', '.tsx', '.js', '.vue', '.less', '.css'], alias: { vue: isVue3() ? path.resolve( path.dirname(require.resolve('vue3')), 'dist/vue.runtime.esm-bundler.js' ) : path.resolve(path.dirname(require.resolve('vue2')), 'vue.runtime.esm.js');, } },

在组件库代码中

运行中兼容,抹平差异

在Vue2.7和Vue3.x中的API是有一定差异的,我们之前在兼容方案中提到,所谓的兼容实际上就是去抹平 2.7 → 3.x 的差异,实际上我们抹平差异的方式是把 2.7 ⇒ 3.x 。那我们就需要去写一个适配代码去重新实现一些方法来兼容,大致方法如下。

javascript export { Teleport, Transition, cloneVNode, Fragment, TransitionGroup, render, createVNode, createComponent, injectService, ....... };

然后根据当前环境来导出对应版本的方法即可。(vue2.7 导出适配重写后的,v3.x 可直接导出)

postinstall 来实现构建产物的切换

什么是postinstall,这玩意有什么用

postinstall 是一个 Node.js 脚本钩子,它会在使用 npm install 命令安装完依赖包之后自动执行。在一个项目的根目录下,你可以在 package.json 文件中定义 postinstall 钩子,用于执行一些在依赖包安装完成后需要执行的操作。

通常情况下,开发者会在 postinstall 钩子中执行一些构建、编译、配置等操作,以确保在安装依赖包后项目可以正确运行。

示例,在 package.json 文件中定义 postinstall 钩子:

json { "name": "my-app", "version": "1.0.0", "scripts": { "start": "node index.js", "postinstall": "node ../script/postinstall.js" }, "dependencies": { "express": "^4.17.1" } }

在上述示例中,当你运行 npm install 安装依赖包时,postinstall 钩子会自动执行 npm run build,从而触发构建操作。

需要注意的是,由于 postinstall 钩子是在依赖包安装后执行的,因此它适用于执行与依赖包相关的构建、编译、配置等任务。如果需要在开发过程中进行调试或运行其他命令,最好使用其他钩子,如 prestartprebuild 等。

在兼容v2和v3中,postinstall的作用是什么

根据它的自动执行的特性,在我们install之后要去根据组件库被安装的所在vue环境修改所使用到的产物路径

javascript const Vue = loadModule('vue'); const version = process.env.npm_config_vueVersion || (Vue ? Vue.version : '2.7.');

这样利用version.startsWith()函数就可以确定当前安装环境的版本号,利用版本号来切换所使用的产物的路径即可。(我们的安装包中应该是有两套产物,用于对应切换)

参考文献

https://juejin.cn/post/7238472159647399996

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于Vue 3和Element Plus的后台管理开源模板是一种用于快速开发后台管理系统的框架。Vue 3是一种流行的JavaScript框架,它提供了一种简单、灵活和高效的方式来构建用户界面。Element Plus是一个基于Vue的UI组件,它提供了一套美观、易用和高性能的组件,可以帮助开发者更方便地构建后台管理系统。 使用这个开源模板,开发者可以快速搭建一个功能完善的后台管理系统。该模板提供了许多常用的功能模块,如用户管理、权限管理、数据统计等,开发者只需根据实际需求进行定制和扩展即可。同时,该模板还提供了一套简洁、美观的界面设计,用户体验良好。 基于Vue 3和Element Plus的开源模板具有以下优点: 1. 高度可定制性:开发者可以根据项目需求自由定制模板,添加需要的功能模块和样式。 2. 简单易用:Vue 3和Element Plus都采用了简洁的API设计,使开发者能够以更快的速度进行开发。 3. 良好的兼容性:基于Vue 3和Element Plus的模板可以兼容多种浏览器和设备,保证用户能够在不同平台上正常使用。 4. 大量的组件和工具支持:Element Plus提供了大量的UI组件和工具,如表格、表单、图表等,可以帮助开发者快速构建出功能丰富的后台管理系统。 总之,基于Vue 3和Element Plus的后台管理开源模板是一种高效、灵活和易用的框架,能够帮助开发者快速搭建功能完善的后台管理系统。无论是个人项目还是企业项目,都可以通过使用这个模板来提高开发效率并获得优秀的用户体验。 ### 回答2: 基于Vue3和Element Plus创建的后台管理开源模板是一个用于快速搭建后台管理系统的框架。Vue3是一个流行的JavaScript框架,它提供了简洁、高效的开发方式,使得开发者可以轻松构建大型项目。Element Plus是一套基于Vue3的UI组件,其中包含了许多实用的组件和工具,能够满足后台管理系统的各种需求。 这个开源模板提供了一个完整的后台管理系统的架构和样式,使得开发者可以快速搭建自己的后台管理系统。它包含了常用的功能模块,如用户管理、权限管理、数据展示、数据编辑等。同时,它还提供了丰富的UI组件和样式,使得系统的界面看起来美观、易用。 使用这个开源模板,开发者可以在短时间内搭建一个功能完善、界面漂亮的后台管理系统。它提供了一些基本的配置选项,开发者可以根据自己的需求进行定制。同时,模板代码结构清晰、易于扩展,开发者可以根据自己的业务逻辑进行修改和添加功能。 总之,基于Vue3和Element Plus创建的后台管理开源模板,是一个功能强大、易用性高的框架,能够帮助开发者快速构建自己的后台管理系统。无论是小型项目还是大型项目,都可以通过这个模板节省开发时间,提升开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值