搞出一个 vue-element-admin 的 Vue3 版本 | 升级全过程记录

最后一块拼图拼上之后…

之前我们发布了基于代码转换工具 GoGoCode 的 Element to Element Plus 转换插件(升级 Vue3 的最后一块拼图,快试试这个工具自动升级你的 Element 老项目),配合先前发布的 Vue 转换插件,它能够帮你把项目里的 Element+Vue2 的项目自动升级成 ElementPlus+Vue3 的,我曾激动地写下:最后一块拼图已经拼上!

文章里我们用社区上深受大家欢迎的 vue-element-admin 为例子介绍了我们工具的使用方法,本来只是想举个栗子,但我们还是低估了这个项目的热门程度,很多人加上了钉钉群(34266233)求助:我的项目就是从这个项目起步魔改的,我就是需要那个项目的 Vue3 升级方案。

好的拼图总是拼了又拼,既然如此,我们就把那个例子完善一下,在工具的帮助下结合一些手动的修改,搞出来一个 vue-element-admin 的 Vue3 版本,有需要的朋友可以考虑直接使用,这个项目完全由 Vue3+ElementPlus 驱动,功能和原来保持一致,你可以尽情使用新的特性!

先上图:

image.png

对已有项目想要升级的朋友,我也下面把整个过程的记录下来,可以作为参考。

动手!

使用 GoGoCode 的自动升级部分我们在前文中已经写得很清楚了,在这里不再赘述

手动修改部分

升级运行时依赖

这里主要是把 Vue2 及配套升级到 Vue3 及配套,还有 element-ui 升级到 element-plus

image.png

升级构建依赖

我们主要是吧 @vue/cli-service 从 4 升级到 5,对应的 webpack 也从 3 升级到了 5,以至于后面我们要修改一些构建流程。

image.png

升级构建流程

修改 vue.config.js,升级配置以适配 Webpack5

image.png

image.png

移除支持性差的插件,这里面的插件有些已经不兼容 Webpack5,有些已经被内置。

image.png

image.png

css 引入变更

src/styles/element-variables.scss

image.png

入口文件变更

首先需要保证 window.$vueApp = Vue.createApp(App) 在最前面,然后把一些导入即运行还要依赖 Vue 实例的文件改成函数,将 app 传入。

image.png

image.png

路由变更

最新版的 vue-router 不再支持前面无 /* 的做法,我们把他们改掉:

image.png

addRoutes 方法已被移除,我们用其它方式替代:

image.png

修复 icon 的问题

原有 icon 是使用 iconfont 的形式,因此支持字符串动态引入,为了兼容字符串引入,做了一个 map索引到所有组件

image.png

image.png

router 和 transition 共用的调整

在 Vue3 中,二者共用时应该让 <router-view> 套在 <transition> 的外面

image.png

取消原来的黑魔法引入 css 变量

原来作者用了一个黑魔法从 scss 文件中引入 css 变量到 js 中,在 Webpack5 中工作得不是很好,所以这里直接简单粗暴地贴到 js 里面。

image.png

修复一些组件升级导致的样式对齐问题

image.png

以上代码均可在 commits 中看到:github.com/gogocodeio/…

项目地址:github.com/gogocodeio/…

欢迎大家尝鲜,反馈问题~

升级有问题,欢迎大家来群里寻求帮助!

希望 GoGoCode 和配套的代码转换工具能帮助大家少做一些千篇一律的工作,早点下班回家,如果你在使用中遇到什么问题,欢迎通过以下方式联系我们:

issues: github.com/thx/gogocod…

钉钉群:34266233 群里有很多热心的小伙伴~

最后:求 star 支持!

Github:github.com/thx/gogocod…

官网:gogocode.io

猜你喜欢

转载自juejin.im/post/7086454715109769253
今日推荐