框架升级背景

公司目前业务迭代很快,且大部分的流量都在公众号上。然而我们公众号所使用的框架却是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,然后看最小单位如何执行,可行的话,再进行移植。

逐步替换

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

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

更新之前:

更新之后:

后话

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

记一次Vue框架升级相关推荐

  1. 【面试题】当面试官让我回答React和Vue框架的区别......

    Vue 和 React 作为当前前端两大火热的框架,面试的时候自然不少被提及: 请说一下你对react/vue框架的理解 请对比一下两大框架的优缺点 其实react和vue大体上是相同的,比如都使用虚 ...

  2. Springboot+mysql+基于VUE框架的商城综合项目设计与实现 毕业设计-附源码111612

    基于VUE框架的商城综合项目设计与实现 摘 要 随着科学技术的飞速发展,社会的方方面面.各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,商城综合项目当然也不能排除在外.商城综合项目 ...

  3. (附源码)Springboot+mysql+基于VUE框架的商城综合项目设计与实现 毕业设计111612

    基于VUE框架的商城综合项目设计与实现 摘 要 随着科学技术的飞速发展,社会的方方面面.各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,商城综合项目当然也不能排除在外.商城综合项目 ...

  4. 公司项目vue cli2升级到vue cli3

    背景: 公司项目历时时间较长,通过长时间的迭代,目前项目文件较多(src目录下有2217个文件),系统庞大, 之前通过vue cli2脚手架构建的项目框架,在本地开发时已经明显感觉到吃力(项目首次启动 ...

  5. vue框架如何转换成普通html,html和vue框架

    Vue框架Element的事件传递broadcast和dispatch方法分析 前言 最近在学习饿了么的Vue前端框架Element,发现其源码中大量使用了$broadcast和$dispatch方法 ...

  6. 基于Springboot+VUE框架开发的企业微信SCRM系统

    应用介绍 基于Springboot+ vue框架开发的企业微信SCRM 系统是一款基于人工智能的企业微信SCRM系统,企业微信SCRM系统基于企业微信开放能力,不仅集成了企微基础的客户管理和后台管理功 ...

  7. springboot基于VUE框架的商城综合项目设计与实现毕业设计源码111612

    基于VUE框架的商城综合项目设计与实现 摘  要 随着科学技术的飞速发展,社会的方方面面.各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,商城综合项目当然也不能排除在外.商城综合项 ...

  8. springboot基于VUE框架的商城综合项目设计与实现毕业设计源码

    基于VUE框架的商城综合项目设计与实现 摘  要 随着科学技术的飞速发展,社会的方方面面.各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,商城综合项目当然也不能排除在外.商城综合项 ...

  9. Vue 框架-02-事件:点击, 双击事件,鼠标移上事件

    Vue 框架-02-事件:点击, 双击事件,鼠标移上事件 1.单击事件:v-on:click 源码 app2.js : //实例化 vue 对象 new Vue({//注意代码格式//el:eleme ...

最新文章

  1. [教程]JS从糊涂到明白:一步一步编写计算器2 – 简化代码
  2. Centos7下安装Docker(详细安装教程、傻瓜式安装)
  3. ThinkPHP3(添加,修改,删除)
  4. 变量声明方式:let与var的区别
  5. 二叉树——医院设置(洛谷 P1364)
  6. python 线程池用法_python 线程池 ThreadPoolExecutor 的用法
  7. elsevier模板_英文论文双栏模板
  8. uva 12730(期望经典)
  9. iOS底层探索之多线程(一)—进程和线程
  10. php家乡介绍网页,家乡网站设计与实现.doc
  11. YYKit作者之 iOS保持界面流畅的技巧
  12. Tensorflow中PRelu实现细节
  13. 谷歌浏览器永久打开Flash插件
  14. 从重大事件保障,看华为如何打造一流保障体系
  15. 添加MSN客服代码,可显示MSN在线和不在线,自动打开MSN聊天窗口
  16. 微信小程序.阿里巴巴矢量图标库iconfont使用
  17. sqlite数据库的版本更替
  18. ESP32 的 I2C 原理 应用入门
  19. Python爬虫入门教程07:腾讯视频弹幕爬取
  20. 学java难不难?java应该怎么学?

热门文章

  1. 火眼睛睛查coredump(stl sort)------永远让比较函数对相同元素返回false
  2. 项目实战|100个蓝牙接收器发货了
  3. 在ODM公司要不要跳槽到创业公司
  4. Linux 内核宏 time_after解析
  5. C语言 程序代码编写规范
  6. Android 异常问题分析
  7. sketchup边线设置_春天花花天桥,SketchUp草图大师快速建模!
  8. win10编辑js文件报错,错误','
  9. 天池 在线编程 扫雷(BFS)
  10. python安装scipy出现红字_windows下安装numpy,scipy遇到的问题总结