项目从vue2 升级vue3,项目大迁移 ,UI组件库更换

目录

背景描述

开发准备

第一步:升级环境

第二步:划分功能迁移顺序

第三步:详细了解需要迁移的业务页面

第四步:项目的一些配置的准备

详细开发流程

总结/分析:


背景描述

之前的版本:vue 2.6.8 + iview 3.3 + element-ui 2.6.1 + echarts 4.2
升级后vue 3 + element-plus + echarts5 

有一个项目的后台管理系统之前一直用的vue2.6.8,大概是5年前开始开发的项目,最近要新写一个项目,但是用到之前的后台管理系统,所以这次leader打算让我将Vue2升级到vue3,因为vue3我最熟练的还是element-ui的组件,所以UI框架打算还是用这个,之前Vue2用的iview的UI虽然好看了一点点,但是这个组件库很多组件有一些弊端,两个组件库混用还有很多不可解决的bug,所以这次干脆弃用。

升级Vue3是一个方面,另一个是要将项目里的功能全部挪过来,虽然admin后台的功能也不多,也就以下几个模块:

1. 人员管理

2.角色权限管理

3.统计汇总

4.操作记录

5.个人设置

6.新增的两个业务页

这几个模块都是admin后台常见的功能,难点是这个后台系统的主要脉络我并不清晰,也就大概了解一些权限方面的控制,详细的功能如果完全升级到vue3的写法,也就要重新写,有一些功能升级起来,肯定要重新测试,并且之前的摒弃的逻辑也要全部了解,所以时间上肯定很紧急,但是我现在也不要求尽善尽美,现将后台的主要功能搭起来,然后一些比如人员管理里面的很多功能,我可以先不做,主要是权限这块还要沿用之前的写法,因为后端不升级,所以接口都复用。


开发准备

先起一个空项目,引用一些必要的框架等,然后就开始迁移旧admin平台的功能。

起项目的过程,很多地方都有教程,我这边就不多讲了,我先梳理我主要的迁移过程。

第一步:升级环境

升级之前看到自己的node 还是14版本,这里先升级node,两种方法,卸载再安装新版本,或者借助NVM来切换node版本,它帮助我们下载安装。我之前写过一篇教程,可以看:NVM使用教程

这次将node升级为20.2.0的版本,所以下载nvm后就很好控制啦:

但是升级完node,还需要对应地升级npm,这里有一个对照表:


我现在的npm 还是6.14.17 所以下一步就是升级npm ,不过nvm直接给我更新啦,很轻松,第一步很顺畅!坏消息是,旧项目,切换了20的版本后就起不来了,不兼容,所以我需要来回切换。


第二步:划分功能迁移顺序

因为是迁移旧项目,并且升级版本,所以前端重新写,但是可以用旧项目的服务,也就是我还可以用旧项目的接口来改造,那么久不用考虑接口,只考虑功能上的迁移顺序了。在这一步,需要先知道,系统内除了业务以外的主要功能,之前梳理的是业务功能,比如各种管理页面,这里是详细的系统迁移的过程:

1.登录、退出功能

2.Axios的封装和API

3.路由跳转和路由表的配置

4.用户信息存储,涉及store

5.权限管理,暂时可以先不管

6.系统的layout开发

7.sidemenu的开发

8.header的开发

9.main区域的开发

10.组件库的引入

11.系统主题样式的引入和迁移

12.开始开发页面

13.图标组件库的引入,SVG的封装
以上等等

第三步:详细了解需要迁移的业务页面

这里是详细的页面:首页、统计汇总、人员管理、项目列表、角色设置、操作记录、个人设置,以及需要新加的两个业务页,其中人员管理和项目列表是共用一个页面,所以,会封装的比较麻烦,后面再开发,而角色管理是控制权限的,所以也后面开发这部分,我先按照超级管理员来写,比较简单写的,肯定是个人设置,首页,所以开发的话,也先开发这部分,之后涉及权限和角色的再详细阐述。

第四步:项目的一些配置的准备

这里是项目的业务开发前的一些准备工作,先把项目配置好,因为用了一个比较简单的模板,所以就先在模板的基础上进行操作,并且在项目的开始之前,先将项目的settings设置好,这样才不会格式化冲突,我这里直接粘贴复制的其他项目的。

这里我个人浅浅的见解是,毕竟很多人协同开发项目,编辑器格式化不一样,很容易出现代码覆盖的问题,不方便后期维护和代码历史回溯。

所以我先在项目引入了ESLint 和 Prettier,当然使用哪个看团队要求,我这里是都使用了。

如果接手老项目,要迁移新项目,肯定要将之前项目的规范化要求拿过来,通常是 .eslintrc.js.eslintrc.json.prettierrc.js.prettierrc.json 等文件。我主要改了下面几个:

并且需要配置vscode下的Settings.json文件。

第五步:main.ts改成main.js(可忽略)

并且在一切开始之前,由于工期较短,我自己也比较擅长JS,所以要先将TS改成JS的,那么这一步,就需要花费一些时间。这部分工作,比较繁琐,根据项目的配置来,每一步都需要查找各个配置和插件之间的关系,很多插件不太了解,所以磕磕绊绊的,但是主要改的是这些:

 箭头指向的都是新加或者修改文件名的ts文件,既然我要用JS来写,而且Ts的一些配置我也不熟悉,那么我干脆就不用TS,但项目还是要TS兼容JS,所以把main,permission,settings这几个文件改成JS写法,然后配置vite.config.js,也就是JS的一些打包配置,jsconfig.json 这是开发配置,其余的配置都不改,这样也顺利启动起来了。


详细迁移流程

系统的基础开发配置大部分弄好了,然后第一步需要做的工作由于引用了模板,所以很多前期工作已经被代替了,这里理了一下详细的内容和流程!

1.系统的第一个功能是登录,那么需要加一个页面,登录页,和登录后的跳转页,登录账号先使用admin账号,将默认跳转到页面先加上,所以现在是加了两个vue页面。

2.需要登录,那么肯定要有路由表,所以这一步,先将原先项目的路由表,升级版本和配置,然后将路由表配置好。

3.登录功能的实现,肯定需要axios的帮助,那么此刻先去将Axios的拦截设置好,然后封装好,将之前的API接口封装成简洁一些的,之前的太杂乱了,API都不放在一块,肯定不好管理。

4.画登录页面,肯定需要组件之类的,之前的样式可以照抄,基本都是几个背景图片和几个输入框,但是组件既然要变成element-plus的,所以要先引入组件库。

5.写登录功能,登录后肯定要存用户信息,而且登录系统后刷新页面会获取用户的信息和权限,所以这一步要使用store,那么此刻也要引入store,到这一步,基本需要导入的库都差不多引用完了。

6.根据划分的功能,来一步步实现需求。

总结

接下来改是从登录页开始开发了,当然有很多琐碎的工作,不过我会划分好模块进行的,可以从专栏里查看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/241192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PHY6222】绑定详解

1.函数详解 bStatus_t GAPBondMgr_SetParameter( uint16 param, uint8 len, void* pValue ) 设置绑定参数。 bStatus_t GAPBondMgr_GetParameter( uint16 param, void* pValue ) 获取绑定参数。 param: GAPBOND_PAIRING_MODE,配对模式,…

【postgres】8、Range 类型

文章目录 8.17 Range 类型8.17.1 内置类型8.17.2 示例8.17.3 开闭区间8.17.4 无穷区间 https://www.postgresql.org/docs/current/rangetypes.html 8.17 Range 类型 Range 类型,可以描述一个数据区间,有明确的子类型,而且子类型应该能被排序…

计算机网络——数据链路层(三)

前言: 前面我们已经对计算机网络的物理层有了一个大概的了解,今天我们学习的是物理层服务的上一层数据链路层,位于物理层和网络层之间。数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自物理层来的数据可靠地传…

Mac使用Vmware Fusion虚拟机配置静态ip地址

一、设置虚拟机的网络为NAT 二、修改虚拟机的网络适配器网络 1、查看虚拟机的网卡 cd /etc/sysconfig/network-scripts#有些系统显示的是ens33,ens160等等 #不同的系统和版本,都会有所不同 #Centos8中默认是ens160,在RedHat/Centos7则为ens33 2、查看网…

Java语法---使用sort进行排序

目录 一、升序 二、降序 (1)类实现接口 (2)匿名内部类 三、自定义排序规则 四、集合中的sort排序 (1)升序 (2)降序 (3)自定义排序 一、升序 升序排…

C++内存管理和模板初阶

C/C内存分布 请看代码: int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)mallo…

OpenHarmony之内核层解析~

OpenHarmony简介 技术架构 OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 组件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的组件…

一周工作问题总结(2023.12.18-2023.12.22)

一周工作问题总结 1. 接口调用频率2. 汉字在数据库中占用字节问题3. Map在循环中修改自己的key与value4. Group BY5.递归同步数据6.代码移动Idea飘红 1. 接口调用频率 供应商给的接口可以每秒调用5-10次,那么我为了保险每秒调用5次,为了防止过度调用接口…

BUG记录——drawio出现“非绘图文件 (error on line 7355 at column 83: AttValue: ‘ expected)”

BUG现象 drawio出现“非绘图文件 (error on line 7355 at column 83: AttValue: ’ expected)”,如下图: 解决办法 这只是我自己摸索到的解决办法并不一定适用于所以人,对我是适用的。 首先用记事本打开损坏的drawio文件,如下 …

mathtype公式章节编号

1. word每章标题后插入章节符 如果插入后显示章节符,需要进行隐藏 开始->样式->MTEquationSection->修改样式->字体,勾选隐藏 2. 设置mathtype公式编号格式 插入编号->格式化->设置格式

什么是动态代理?

目录 一、为什么需要代理? 二、代理长什么样? 三、Java通过什么来保证代理的样子? 四、动态代理实现案例 五、动态代理在SpringBoot中的应用 导入依赖 数据库表设计 OperateLogEntity实体类 OperateLog枚举 RecordLog注解 上下文相…

SpringMVC基础知识(持续更新中~)

笔记: https://gitee.com/zhengguangqq/ssm-md/blob/master/ssm%20md%E6%A0%BC%E5%BC%8F%E7%AC%94%E8%AE%B0/%E4%B8%89%E3%80%81SpringMVC.md 细节补充:

深度学习 | 梯度下降算法及其变体

一、最优化与深度学习 1.1、训练误差与泛化误差 1.2、经验风险 1.3、优化中的挑战 1.3.1、局部最小值 1.3.2、 鞍点 经常是由于模型复杂度过高或者训练样本数据过少造成的 —— Overfitting 1.3.3、悬崖 1.3.4、长期依赖问题 二、损失函数 2.1、损失函数的起源 损失函数(loss…

041_小驰私房菜_MTK平台添加支持通过原生Camera API接口调用UsbCamera

平台:MTK 问题:通过调用Android Camera API去调用UsbCamera,需要做哪些修改? Google官方文档,关于usbcamera的支持: 外接 USB 摄像头 | Android 开源项目 | Android Open Source Project 相关修改内容如下: 一、MTK平台支持通过标准接口打开USB Camera 1)device相…

每日一题——轮转数组

1. 题目描述 给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。 示例1: 输入:nums [1,2,3,4,5,6,7],k 3 输出:[5,6,7,1,2,3,4] 解释: 向右轮转 1步:[7,1,2,3,4,5,6] 向右…

Unity自带的NavMesh寻路组件

最近看了一下Unity自带的NavMesh寻路组件,先说一下基本的使用: 首先先把AI Navgation的package包给安装上。 给场景地图添加上NavMeshSurface组件,然后进行烘焙,烘焙出对应的场景地图文件。 给移动物体添加对应的Nav MeshAgent组…

【XML】TinyXML 详解(二):接口详解

【C】郭老二博文之&#xff1a;C目录 1、XML测试文件&#xff08;laoer.xml&#xff09; <?xml version"1.0" standalone"no" ?> <!-- Hello World !--> <root><child name"childName" id"1"><c_child…

可视化开发

可视化开发 数据可视化 交互式可视化 文章目录 可视化开发前言一、可视化开发二、Python数据可视化大屏GIS图像智能识别处理软件开发三、可视化开发必备总结前言 可视化开发可以帮助开发者通过图形化界面和拖放操作来创建、编辑和测试应用程序。使用这些工具,开发者可以提高开…

解决用Fiddler抓包,网页显示你的连接不是专用/私密连接

关键&#xff1a;重置fiddler的证书 在Fiddler重置证书 1、Actions --> Reset All Certificates --> 弹窗一路yes 2、关掉Fiddler&#xff0c;重新打开 3、手机删掉证书&#xff0c;重新下载安装。 &#xff08;如果还不行&#xff0c;重新试一遍&#xff0c;先把浏览器…

1223西站坐标更新

1223 西站坐标更新 1.Update for the station’s location def initial_out_map_indoor_points(self):Load the indoor data and update both the wall_matrix and the ditch_matrix.# Initialize the wall_matrix# List of coordinatescoordinates [(417, 287, 417, 290),(4…