位置: IT常识 - 正文

Vue2 大型项目升级 Vue3 详细经验总结(vue2升级3)

编辑:rootadmin
Vue2 大型项目升级 Vue3 详细经验总结 前言

推荐整理分享Vue2 大型项目升级 Vue3 详细经验总结(vue2升级3),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue做大型项目,vue2.0项目升级vue3.0,vue2.0项目升级vue3.0,vue项目升级,vue2搭建项目,vue大型项目撑得住吗,vue大型项目撑得住吗,vue2项目升级3,内容如对您有帮助,希望把文章链接给更多的朋友!

前段时间,公司准备在现有的 Vue2 项目中做一个聊天系统,但考虑开发聊天系统的周期并不短,客户又急需。于是准备对接腾讯的 IM 组件,来实现。

不知道的这里贴个官网: IM TUIKit 官方文档

对于 TUIKit,官方文档上有以下要求: 然而我们公司项目是使用 Vue2 版本的,这显然不符合要求。如果要对接,那么必然要升级项目为Vue3 版本。

思考

首先要明白,Vue2 升级 Vue3 能带来什么?

可以参看一下这篇博客: 应不应该从 Vue 2 升级到 Vue 3

总结一下下列几点:

Vue3 优点:1. 增加了代码的可维护性

Vue2 使用的是 options 的API ,代码逻辑比较分散,可读性差,可维护性差。Vue3 使用的是 compositionAPI 逻辑分明,可维护性高,更友好的支持TS。在 template 模板中支持多个根节点,支持jsx语法。

2. 提升了页面渲染性能

Vue3 在更新DOM算法上,做了优化。在 Vue2 中,每次更新diff,都是全量对比,Vue3则只对比带有标记的,这样大大减少了非动态内容的对比消耗。

3. 加强了 MVVM 双向数据绑定的效率

Vue2 的双向数据绑定是利用 ES5 的 Object.definePropert() 对对象属性进行劫持,结合 发布订阅模式的方式来实现的。Vue3 中使用了 es6 的 ProxyAPI 对数据代理。 相比于vue2.x,使用proxy的优势如下:

defineProperty只能监听某个属性,不能对全对象监听可以省去for in、闭包等内容来提升效率(直接绑定整个对象即可)可以监听数组,不用再去单独的对数组做特异性操作 vue3.x 可以检测到数组内部数据的变化4. 项目可持续发展

Vue 2官方还会再维护两年,但两年后的问题和需求,官方就不承诺修复和提供解答了,Vue 3 则不会。

当然,还有其他的,这里只是列出几个主要的。

升级存在的隐患新的响应式系统用了 Proxy,会存在兼容性问题(不支持IE)。框架底层进行了大量重构,新增和删除了很多原来的API,代码结构也发生了变化。很多地方需要进行破坏性修改,从而容易导致各种问题的出现。项目使用到的第三方插件和 UI框架(Element)也需要替换和更改成 对应Vue3可用版本。升级方式

通过工具+手动升级

思路:

第一版可以先从基础进行迁移。完成框架整体升级到Vue3(可运行)之后可以进行细化。

步骤:

第一步: 先把Vue2 框架整体替换成 Vue3,因为目前 Vue3也是兼容了 Options 写法,这样代码结构可以先不用更改,后期可以逐步修改(因为涉及到所有页面和组件)。之后新增的页面和组件按照 Vue3 新增的 compositionAPI 结构来写。

第二步: 把 Vue3 中已经不再支持的 API 和语法进行修改替换。包括 Vue3 已经不再支持过滤器filter,v-model 用法也改变等。

Vue2 大型项目升级 Vue3 详细经验总结(vue2升级3)

第三步: 把项目使用到的第三方插件和UI框架(Element)替换成Vue3版本,对应用法可能也需要修改。需要通过 package.json 里注册目录,在页面进行检索修改。

对于这一步升级有以下几点比较麻烦:

项目中依赖的库并不支持vue3vue2到vue3的一些破坏性更改项目中依赖组件库(ElementUI等)的破坏性更改对一些新特性的尝试(vite,ts,pinia)等 公司项目迁移造成稳定性破坏(极其重要)

第四步: 确保项目代码语法编译无误后,需要检查代码中的业务是否正确,避免对公司项目迁移造成稳定性破坏(极其重要)。

第五步: 使用 TypeScript 重构 JS 代码,TypeScript 比 JavaScript 多了静态类型检查,也增加了一些新的语法,是给项目锦上添花。但是这一步会比较耗时(因为相当于修改把JS代码都要过一遍),但是项目中可以同时存在JS 和 TS,所以可以逐步替换。

使用自动化工具: 通过使用目前比较好用的开源工具可以完成第一步和第二步的转换,目前使用比较多的就是 gogocode:文档

对于工具改造代码,存在很多未知性,项目业务代码中有些比较复杂的(例如表单联动,规则校验等等)可能会对原来的逻辑有影响,需要逐一人工比对和测试。

实施1. 创建一个新的 vue3 + TS 项目,里面安装完相关基础依赖

整个项目重新搭建,使用了 Vue3 作为技术框架。使用了 Vite 作为打包和构建工具(代替了之前 Vue2 的 Webpack 构建工具),因为 Vite 拥有更好的打包编译性能。 增加了 TypeScript 依赖,可以作为 TS 代码编写编译,增强了项目可持续维护性(之后可转成全TS)。使用 VueRouter 4.1.1 版本作为项目页面路由控制,此版本为 Vue3 配套版本。使用了 Pinia 代替了 Vuex 作为统一状态管理模块,因为 Pinia 与 Vuex 相比,Pinia 提供了一个更简单的 API,具有更少的规范,提供了 Composition-API 风格的 API,最重要的是,在与 TypeScript 一起使用时具有可靠的类型推断支持。Api请求模块仍然采用了易用、简洁且高效的http库 Axios。使用 Sass 作为 CSS 的预编译语言,增强 CSS 的灵活性。使用升级版 Element Plus 作为界面 UI 框架。

技术栈Vue3

项目使用的是 Vue ^3.2.36 版本。 Vue3 官网及其介绍:https://v3.cn.vuejs.org/guide/introduction.html

TypeScript

TypeScript 官网文档:https://www.tslang.cn/

VueRouter

VueRouter 官网及其介绍: https://router.vuejs.org/zh/

Pinia

Pinia 官网及其介绍:https://pinia.web3doc.top/

Axios

Axios 官网及其介绍:http://www.axios-js.com/

Sass

Sass 官网及其介绍:https://www.sass.hk/

Element Plus

Element Plus 官网及其介绍:https://element-plus.gitee.io/zh-CN/guide/design.html

代码规范

使用 EditorConfig + Prettier + ESLint 组合来实现代码规范化。

这样做带来好处:

解决团队之间代码不规范导致的可读性差和可维护性差的问题。解决团队成员不同编辑器导致的编码规范不统一问题。提前发现代码风格问题,给出对应规范提示,及时修复。 减少代码审查过程中反反复复的修改过程,节约时间。自动格式化,统一编码风格,从此和脏乱差的代码说再见。

VSCode 编辑器 需要去插件市场下载插件 EditorConfig for VS Code 、Prettier - Code formatter、ESLint。 JetBrains 系列(WebStorm、IntelliJ IDEA 等)则不用额外安装插件,可直接使用 EditorConfig 配置。

构建工具Vite

项目使用的是 Vite ^2.9.9 版本。 Vite 官网及其介绍 : https://vitejs.cn/

运行要求

Vue 版本:3.0以上 node 版本:Vite 需要 Node.js 版本 >= 12.0.0 浏览器:非IE浏览器

项目目录结构src│ App.vue 项目根节点│ env.d.ts 类型
本文链接地址:https://www.jiuchutong.com/zhishi/290660.html 转载请保留说明!

上一篇:uniapp路由—— uni-simple-router(uniapp route)

下一篇:一只带着幼崽的长胡子皇狨猴 (© Chris White/iStock/Getty Images Plus)(带着崽崽宠老公免费阅读)

  • 卡西欧12点嘀嘀怎么关(卡西欧12点嘀嘀怎么关小方块)

    卡西欧12点嘀嘀怎么关(卡西欧12点嘀嘀怎么关小方块)

  • wifi低数据模式怎么关闭(wifi低数据模式影响网速吗)

    wifi低数据模式怎么关闭(wifi低数据模式影响网速吗)

  • 酷狗音乐怎么样剪辑本地音频作为来电铃声(酷狗音乐怎么样下载mp3格式)

    酷狗音乐怎么样剪辑本地音频作为来电铃声(酷狗音乐怎么样下载mp3格式)

  • 微信通话可以录音吗(微信通话可以录音吗怎样录音)

    微信通话可以录音吗(微信通话可以录音吗怎样录音)

  • 键盘当鼠标用怎么移动(键盘当鼠标用怎么设置)

    键盘当鼠标用怎么移动(键盘当鼠标用怎么设置)

  • 华为nova6发热怎么回事(华为nova65g手机发热)

    华为nova6发热怎么回事(华为nova65g手机发热)

  • 小米蓝牙鼠标无法连接(小米蓝牙鼠标无法进入蓝牙配对模式)

    小米蓝牙鼠标无法连接(小米蓝牙鼠标无法进入蓝牙配对模式)

  • xr和11的膜一样吗(苹果xr的膜和苹果11的膜一样吗)

    xr和11的膜一样吗(苹果xr的膜和苹果11的膜一样吗)

  • 抖音为什么点了关注还是显示没有关注(抖音为什么点了爱心找不到)

    抖音为什么点了关注还是显示没有关注(抖音为什么点了爱心找不到)

  • 腾讯超级视频vip会员有什么用(腾讯超级视频vip会员是什么意思)

    腾讯超级视频vip会员有什么用(腾讯超级视频vip会员是什么意思)

  • 进程打印数据什么状态(进程打印数据什么意思呀)

    进程打印数据什么状态(进程打印数据什么意思呀)

  • 小米地震警报怎么开(小米地震警报怎么没声音)

    小米地震警报怎么开(小米地震警报怎么没声音)

  • 淘宝怎么进入帮助中心(淘宝怎么进入帮卖平台)

    淘宝怎么进入帮助中心(淘宝怎么进入帮卖平台)

  • ios自动清理缓存(ios自动清除缓存)

    ios自动清理缓存(ios自动清除缓存)

  • iphone8plus多重多少克(苹果8plus手机有多重)

    iphone8plus多重多少克(苹果8plus手机有多重)

  • 探探匿名表白对方收到怎样的信息(探探匿名表白对方能看吗)

    探探匿名表白对方收到怎样的信息(探探匿名表白对方能看吗)

  • 苹果短信回声效果收到怎么看不到(苹果短信回声效果对方看不到)

    苹果短信回声效果收到怎么看不到(苹果短信回声效果对方看不到)

  • 淘宝个人尺码设置在哪(淘宝个人尺码设置怎么弄)

    淘宝个人尺码设置在哪(淘宝个人尺码设置怎么弄)

  • 算法的时间复杂度是(算法的时间复杂度取决于)

    算法的时间复杂度是(算法的时间复杂度取决于)

  • 微信小程序占用手机内存吗(微信小程序占用存储空间怎么清理)

    微信小程序占用手机内存吗(微信小程序占用存储空间怎么清理)

  • 小米cc9e上市时间(小米cc9e什么时候出的)

    小米cc9e上市时间(小米cc9e什么时候出的)

  • 百度hi账号怎么注销(百度账户怎么注册账号)

    百度hi账号怎么注销(百度账户怎么注册账号)

  • ipad怎么分屏看视频文件同时进行(ipad怎么分屏看电视)

    ipad怎么分屏看视频文件同时进行(ipad怎么分屏看电视)

  • 微信自己发的朋友圈怎么看(微信自己发的朋友圈怎么修改)

    微信自己发的朋友圈怎么看(微信自己发的朋友圈怎么修改)

  • DedeCMS登录后台提示Call to undefined function(dedecms官网)

    DedeCMS登录后台提示Call to undefined function(dedecms官网)

  • 附加税的内容有哪些
  • 出口应退税额如何计算
  • 小微企业企业所得税100万元以下减半征收怎么计算
  • 法定免税项目包括
  • 行政单位财政直接支付适用范围
  • 工业企业取得土地收益
  • 辞退补偿金按照什么工资算
  • 开发票需要填银行吗
  • 无形资产处置收益计入
  • 单用途卡与多用途卡
  • 预付广告费计入什么科目
  • 销售折扣怎么开
  • 固定资产如何抵扣企业所得税
  • 打桩和挖土
  • 货代行业红字冲正发票怎么做凭证
  • 开租金发票可以提前开的吗?
  • 个人去税务局开票流程
  • 小规模季度不超过多少不用交税
  • 2018年生育保险报销
  • 年底结账税金
  • 出口退税收汇凭证是什么
  • 个体户在银行开户
  • 个人所得税征收标准2023
  • 会员卡充值赠送金额怎么做账
  • 仓库收料作业指导书
  • safari下载的文件怎么删除
  • 支付销售佣金如何做账
  • 或有事项确认预计负债的分录
  • 清除文件夹exe病毒工具
  • php开发的优点与不足
  • 出租车车票可以出卖吗
  • 在资本相对充足的情况下,为什么还要进一步引进外资
  • 海康威视网页插件下载
  • php运用的技术php开发有哪些实用的技术
  • 餐饮企业库存盘点表
  • 所有者权益类的期末余额公式
  • elements table
  • 代扣代缴企业所得税账务处理
  • vue的foreach循环
  • 固定资产账面净值和账面价值的区别
  • 企业其他应付款余额非常大的原因
  • 已认证未抵扣完的进项
  • 织梦内容页模板修改
  • 帝国cms相关文章调用
  • 应发工资包括岗位工资吗
  • 投资者控股性质
  • 房产税从租和从价哪个税金高
  • 资产负债表应付职工薪酬是负数是什么原因
  • 建筑公司跨区域经营预缴
  • 什么叫公关费用
  • 发票信息不一致是怎么回事
  • 公司买灭草剂怎么入账
  • 收到政府的奖励企业需要纳税吗?
  • 个人所得税如果不补税会怎么样
  • 长期股权投资如何入账
  • 未打印税务分类怎么处理
  • mysql8.0二进制安装
  • windowsandbox
  • xp系统注册表空白怎么办
  • ubuntu安装超详细教程
  • bios启动项正确设置
  • 魔方u怎么弄
  • linux系统添加用户的命令
  • win10任务栏位置怎么改变
  • OfcPfwSvc.exe - OfcPfwSvc是什么进程 有什么用
  • linux br0配置
  • /usr/bin/install: 无法创建一般文件‘/usr/local/man/man1/cjpeg.1’: 没有那个文件
  • 用360可以装win7系统吗
  • pygame有哪些函数
  • apache部署项目
  • 搭建入门
  • javascript的prompt
  • 刨根问底造句
  • jquery中什么方法用于模拟光标悬停事件
  • JavaScript控制台输出
  • 用python做
  • 教你学python
  • 四川国税发票手机查询
  • 国家税务总局纳税服务司罗名
  • 海关行政处罚实施条例的适用范围
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设