记一次Vue框架升级

框架升级背景

公司目前业务迭代很快,且大部分的流量都在公众号上。然而我们公众号所使用的框架却是3年前的Vue 1.0.16。面对Vue这3年来带来的无数新特性,我们只能望洋兴叹:看得见,摸不着,因为升级这事看起来太难了。

经常可以听到老同事、新同事对老框架频频吐槽,也听到很多同学说升级太难了,完全不可能。

于是,我就寻思着整点事。

升级概况

我们的公众号承载的是一个电商购物平台,历经3年多的版本迭代,积攒了无数的业务代码,既臃肿又庞大,可谓是一个大型的应用程序了。这也是其他同学提到升级不可能的主要原因。

当前的Vue版本: v1.0.16, Vue—Router版本: v0.7.13.
升级后的目标版本:Vue: v2.6.10, Vue—Router: v3.1.3.

升级思路

因为Vue官方有对Vue 1.x迁移到更高版本的说明, 并且还提供了升级助手,那升级的事情完全依赖升级助手便可完成。不过事实是这样吗?

开始动手

下载好官方提供的”迁移工具“,然后在项目的master分支上检出一个新的专门用来做升级的分支,我是这么命名的:update/vue2vue2.x。

好了,准备工作就绪,只需要执行”迁移工具“就可以。Let’s do it!

Holy Shit! 建议改进多达近900个!这工具居然只有提示没有自动修复?这太出乎我的意外了!在这里插入图片描述
这难办了,问题太多了,难道要我一个个手动修复?不过我马上发现,有不少Replace之类的提示,这家伙完全可以自己完成啊,不过这工具的作者比较懒,没写。那我就用这个工具帮我来完成大部分的工作吧。

修改迁移工具

迁移工具在Github上可以直接找到,然后打开源码,阅读,找到它的处理方式,然后修改其中实现,这个过程就不多说了,无非是找到匹配规则,然后读文件,按照规则替换,再写文件。我对一些明显能够自动替换的能力做了处理,比如上图中的898号问题,那这个工具可以帮我自动完成这个能力的。

我的这个工具可能会帮到其它朋友,这里来列一下修改之后提供的能力:

- router.go更换为router.push
- ready生命周期回调更改为mounted(这个使用要谨慎)
- 更改v-for循环的解构顺序,例如:v-for="(key, item) in provinceList" 可以自动替换为:v-for="(item, key) in provinceList"
- 更改回调函数的调用方式,例如:Replace cutword 10 with cutword(10)
- 更改三括号运算符为v-html,例如:Replace {{{content}}} with v-html="content" on a containing element
- 等等等

大概修改了这么些文件:
在这里插入图片描述
我已将修改后的项目开源,需要使用的同学请自取,使用前请慎重。 > https://github.com/sahadev/vue-migration-helper

如果使用上有问题也可联系我。需要使用调试的方式使用,正常方式目前有问题。

node index.js 项目地址

通过工具的自动调整,最终运行后的结果如下:
在这里插入图片描述
已从899个提示减少到243,解决了656个问题,解决占比73%,一共调整149个文件。已经缩短了大量的工作,接下里的问题就需要进行更精细化的调整或者手工操作了。而我接下来选择的是手动修改。先让自动修改的代码跑起来。

运行自动修改后的代码

首要做的应该是调整Vue的框架版本,那么我从官网上拿到了最新的Vue: v2.6.10与Vue-Router: v3.1.3进行替换,并开始运行。

果不其然,遇到了编译问题:
在这里插入图片描述
如果使用我工具的朋友会遇到这个问题,这个地方为了不影响代码的执行过程,让使用者自行调整生命周期,追加了这个提示,我这里需要手动修改为mounted。

修改完成后,编译成功:
在这里插入图片描述
但运行情况怎么样呢?在这里插入图片描述
Vue-tools已经侦测到了Vue的版本,但是界面上一片空白,这是什么情况?这种情况下,最好的办法就是一步步替换,我找到了最新Vue的使用方式,并尝试运行了一个Demo,然后看最小单位如何执行,可行的话,再进行移植。

逐步替换

因为项目太大又很老,这个排查的过程花费了很多的时间与精力。这是一个耐心细致的过程,在这个过程中几次想放弃,但最后从结果来看是坚持下来了。这个每个人可能遇到的情况不一样,就不专门提及这些琐碎的事情了。

趟过了很多坑之后,主要的几个页面都跑起来了,展示正常,点击事件正常,主交易流程可以跑通。到这里只是说主框架的坑趟完了,剩下的事情就是集结其他小伙伴分模块实施,然后协调资源做最终回归测试的过程了。

更新之前:
在这里插入图片描述
更新之后:
在这里插入图片描述

后话

协调资源做完回归测试,还需要灰度发布到线上监控运行情况趋于稳定后才能在这个新的框架上继续做业务开发,这更是一个漫长的过程,不过希望的曙光已经可以看见。

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

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

相关文章

谈谈NLP下一个主战场:万亿参数的预训练模型!

自从BERT诞生以来,各大互联网巨头之间就展开了预训练语言模型军备竞赛,XLNet、ERNIE、RoBERTa、T5、GPT-3....但当事情进展到号称自己是zero-shot learner的GPT-3时,批判的声音变得明显多了。这么大,能用吗?真的能做到…

人物志 | 美团女技术总监任登君:不要给自己的人生设限

在我们美团技术团队超过6000名工程师中,有众多的女同学,她们是支撑中国领先的生活服务电子商务平台不可或缺的力量。3月8日女神节,我们专访了她们的代表——美团广告平台技术负责人任登君。登君也是我们团队里目前职位最高的女性技术Leader&a…

论文浅尝 - ISWC2020 | KnowlyBERT: 知识图谱结合语言模型补全图谱查询

论文笔记整理:胡楠,东南大学博士。来源:ISWC 2020动机像Wikidata这样的现代知识图已经捕获了数十亿个RDF三元组,但是它们仍然缺乏对大多数关系的良好覆盖。同时在NLP研究的最新进展表明,可以轻松地查询神经语言模型以获…

LeetCode 92. 反转链表 II(双指针)

1. 题目 反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。 示例:输入: 1->2->3->4->5->NULL, m 2, n 4 输出: 1->4->3->2->5->NULL来源:力扣(LeetCode) 链接&#xf…

我对你的爱,是只为你而留的神经元

文 | 白鹡鸰有一个小轶专属神经元编 | 小轶有一个白鹡鸰专属神经元什么是苹果?红的?绿的?黄的?球状?斑点?香气?需要咬上一口才能确定?或者……其实我们在说某家技术公司?…

Android动态日志系统Holmes

背景 美团是全球领先的一站式生活服务平台,为6亿多消费者和超过450万优质商户提供连接线上线下的电子商务网络。美团的业务覆盖了超过200个丰富品类和2800个城区县网络,在餐饮、外卖、酒店旅游、丽人、家庭、休闲娱乐等领域具有领先的市场地位。平台大&a…

领域应用 | 知识图谱在小米的应用与探索

本文转载自公众号:DataFunTalk。分享嘉宾:彭力 小米编辑整理:马瑶出品平台:DataFunTalk导读:小米知识图谱于2017年创立,已支持公司了每天亿级的访问,已赋能小爱同学,小米有品、智能问…

前端应用开发架构图谱

个人整理的前端架构图谱,之后会根据这个图谱不断的完善内容。希望这个图谱可以对开发同学的知识脉络有个梳理的作用。 相关图谱文件已上传至Github:https://github.com/sahadev/front-end-architecture,后续将不定期更新。 2020年02月28日已…

丹琦女神新作:对比学习,简单到只需要Dropout两下

文 | 花小花Posy上周把 《对比学习有多火?文本聚类都被刷爆了...》分享到卖萌屋的群里后,遭到了群友们一波嫌弃安利。小伙伴们表示,插入替换的数据增强方式已经Out了,SimCSE才是现在的靓仔。snowfloating说:看完Danqi …

美团点评移动端基础日志库——Logan

背景 对于移动应用来说,日志库是必不可少的基础设施,美团点评集团旗下移动应用每天产生的众多种类的日志数据已经达到几十亿量级。为了解决日志模块普遍存在的效率、安全性、丢失日志等问题,Logan基础日志库应运而生。 现存问题 目前&#xf…

论文浅尝 - ACL2020 | Segmented Embedding of Knowledge Graphs

来源:ACL2020链接:https://arxiv.org/pdf/2005.00856.pdf摘要知识图谱的嵌入愈发变成AI的热点之一,对许多下游任务至关重要(如个性化推荐、问答等)同时,此模型强调两个关键特性:利用足够多的特征…

【论文翻译】HeteSim:异构网络中相关性度量的通用框架

原文链接:https://blog.csdn.net/Mrong1013967/article/details/115330139 HeteSim:异构网络中相关性度量的通用框架 摘要 相似性搜索是许多应用中的一个重要功能,它通常侧重于度量同一类型对象之间的相似性。然而,在许多场景中&a…

LeetCode 234. 回文链表(快慢指针+链表反转)

1. 题目 请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false示例 2: 输入: 1->2->2->1 输出: true进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?来源:力扣(LeetCode) 链接&a…

随机/线性颜色生成器(RandomColorGenerator)

最近在实现https://javascript30.com/的课程,其中有一门课程要求利用Canvas实现一个效果,我发现这个效果其中的颜色是线性生成的。结合我之前已经写过一个随机颜色生成器,就想将这个随机颜色生成器写出来,作为一个工具使用&#x…

美团点评运营数据产品化应用与实践

背景 美团点评作为全球最大的生活服务平台,承接超过千万的POI,服务于数量庞大的活跃用户。在海量数据的前提下,定位运营业务、准确找到需要数据的位置,并快速提供正确、一致、易读的数据就变得异常困难,这些困难主要体…

NAACL’21 | 来看如何让模型学会因为所以但是如果

文 | Eleanor 编 | 戏有一些标准考试那是真的难,难到能分分钟教你做人。对于留学党来说,申请法学博士需要 LSAT 考试成绩、申请商学院需要 GMAT 考试成绩。这些标准考试到底有多难,大概考过的都懂8(嘤嘤嘤_(:з」∠)_)…

领域应用 | 知识计算,华为云赋能企业知识化转型

本文转载自公众号:华为云AI。从计算智能,到感知智能,再到认知智能,是业界普遍认同的人工智能技术发展路径。随着技术的演进,人工智能已经在"听、说、看"等感知智能领域达到或超越了人类水准,但是…

我在小程序工程化方面的一些实践

我在小程序工程化方面的一些实践 早期做小程序时,还是原始时代,项目结构混乱,各种冗余代码,每次迭代时由于高昂的维护成本,极为头疼。遂在一次次的更迭中完成了基础组件的初版,极为酸爽。从此之后在当时的…

LeetCode 430. 扁平化多级双向链表(DFS)

1. 题目 您将获得一个双向链表,除了下一个和前一个指针之外,它还有一个子指针,可能指向单独的双向链表。这些子列表可能有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。 扁平化列表…

详解:多模态知识图谱种类及其应用

详解:多模态知识图谱种类及其应用 本文系统的讲述了一些关于多模态知识图谱的相关知识,作者介绍了一些重要的开源多模态知识图谱,基于百科多模态知识图谱Richpedia以及相关使用网站和多模态知识图谱的应用。>>加入极市CV技术交流群&am…