作者:掘金干货君

https://juejin.cn/post/7117525259212816414

就在前两天,一篇反对Vue2升级到Vue3的文章在vue官方社区引起了热议。(原文链接:Vue 3 was a mistake that we should not repeat[1]

这篇文章从实际应用角度出发,分析了Vue2Vue3在真实项目中实操升级的痛点,提出了一个反对的声音:Vue3的升级是一个错误的选择

在一片热议中,甚至尤大都出来亲自解释并承认了一些问题。本文列举了一些原文中提到的观点以及尤大的回复。希望能给各位读者在实际项目升级时,提供更实际全面的参考。

前言

原作者首先声明了他并没有贬低Vue3的意思。他认为Vue3是非常非常棒的框架,解决了Vue2中很多潜在问题,技术层面改善了开发人员的开发体验,并显著提高了性能。原作者主要的问题,是从Vue3突破性的改变以及周边生态圈未能及时跟上的角度,重点强调了迁移升级成本+风险较大。

关于升级成本问题:尤大也承认了Vue3升级体验并没有想象中的那么流畅,Vue4会吸取经验,做好平稳迭代。这一点本文会在下面详细说明。

接下来,我们针对原文中提到的观点逐一列举解读。

ps: 为了避免语言翻译差异问题,所有原作者尤大的观点都是附上英语原文。

一、破坏性的api变更(Breaking changes)

  • Events API[2]的弃用让这个问题首当其冲。(straightforward like the depreciation of the Events API)。Vue实例再也不能作为事件总线做事件通信,$on,$off,$once的彻底移除意味着之前所有有关代码都必须重新推翻重写,虽然有很好的插件工具让这件事变得没那么复杂,但是仍然会带来不小的迁移成本。

  • 代码构建问题。 你会经常遇到用Vue2写法写出来的代码在构建(build) 失败或抛出警告。因为这些api写法在Vue3中已经被废弃。这问题在已存在的大型项目中的尤为突出(In an existing large-scale application built with Vue 2, you would probably use some of the deprecated or changed APIs)。下图展示了一部分Breaking changes,可以看到破坏性的api变更数确实很多:

image.png

二、颠覆式的设计模式(composition-api)

颠覆式的composition-api慢慢向面向函数思想转变,导致很多原有习惯于options-api的开发者反感Vue正在像react靠拢,没有坚持住Vue特色。它提出了一种新的基于函数的 Vue 组件编写方式,引起了Vue社区大量的争议和分裂,甚至将社区分隔为两种观点阵营针锋相对,最终导致了Vue 最黑暗的一天事件[3]。这很令人沮丧。

(the Request for Comment for the new function-based way of writing Vue components which had an overwhelming amount of responses, both positive and negative.No matter where you stand in this argument splitting the community in half is never a good sign and led to Vue’s Darkest Day and a lot of people getting discouraged over this.)

三、生态系统(The ecosystem)

框架的真正力量来自社区和它周围的生态系统。(The true power of a framework comes from the community and the ecosystem around it.)

生态系统和框架本身一样重要。因为没有责任机制,在有争议的决定和在弃用功能的时候,很多框架周边的生态系统的许多贡献者会被迫离开,并导致许多库被放弃或者延迟更新。很多时候,我们没有办法做版本兼容时,我们往往只能把责任归咎于,开源库缺乏同理心和对大局的理解。(Controversial decisions and no accountability while deprecating features drove many contributors away and resulted in many libraries being abandoned. But blaming open source libraries for delays when you don't give them a feasible way to support both versions shows a lack of empathy and lack of understanding of the bigger picture)

四、文档系统(Documentation)

在我们的日常开发中,尤其是在使用框架时,我们会遇到各种各样的问题,这时我们时常需要google或者问答社区作为帮手,但是目前关于Vue搜索出来的结果几乎全是Vue2的结果,这也很难不令人难过。

(During development, especially with a new framework, Google and StackOverflow are your best friends. Currently, Vue 2 answers are dominating the results which might cause confusion and frustration since many things don’t work the same in Vue 3.)

五、过往案例(The past)

Vue2到Vue3的升级,有一点像angular1到angular2的升级

过渡到 Vue 3 看起来很像从_AngularJS_过渡到_Angular_(_版本 1⇒ 2_)。大量的延迟和重大更改导致了挫败感,最终 Angular 失去了对 React 和 Vue 的吸引力。

(The transition to Vue 3 looks a lot like the transition from AngularJS to Angular (Version 1⇒ 2). A lot of delays and breaking changes led to frustration and eventually Angular lost traction to React and Vue.)

五、结论(Apinion)

  1. 看起来前进的道路其实是倒退。(It looks like the way forward is going backwards)

  2. 开发满意度看起来并不好[4]。(development satisfaction is not looking good)

上图可以看到Vue已经有被svelte超越的趋势。

  1. Vue4应该考虑到整个生态系统并提供迁移路径,否则它将成为没有人愿意使用的最佳框架。(Vue 4 should take into account the whole ecosystem and provide a migration path or it will be the best framework that no one will want to use.)

六、尤大的回复:

1.关于破坏性的api:

这根本不是真的。

当我们进行版本切换时,所有核心库和工具都与这两个版本兼容(或为 Vue 2/3 支持提供单独的版本)。

实际上阻碍升级的依赖都是第三方,主要是 Nuxt 和 Vuetify

2.颠覆式的设计模式:

实际使用过 Composition API + < script setup> 的用户在真是开发中的反馈非常积极,证明这是一个有价值的补充,现在他们中的许多人更喜欢它而不是 Options API。

我们当然可以更好地处理新 API 的引入,但仅仅因为存在争议,并不意味着它是错误的或者不必要的。实际上,引入大的、新的想法的行为,势必会让那些喜欢呆在舒适区的人感到不安,但如果我们迎合这种心态,就永远不会取得真正的进展。

3.关于周边生态和文档系统:

虽然我们确实创造了 Vue CLI、Vuex、Vetur 和 VuePress 的新替代品,但它们本身都有适用于 Vue 3 的版本。这是夸大事实,不尊重团队为提供这些工具的 Vue 3 兼容版本所做的努力。

4.关于和angular的过往对比:

  • 没有可比性,不能拿Vue升级和angularjs -> angular做对比。

  • Angular 和 AngularJS 是根本不同的框架。几乎没有共享交集,除了完全重写之外没有实际的迁移路径。

  • 另一方面,有许多生产 Vue 2 应用程序成功迁移到 Vue 3 的案例。很容易吗,确实不是,但是他们都迁移成功了。

5.关于升级问题:

我们同意,Vue3升级体验并没有想象中的那么流畅。Vue 将随着吸取的经验不断发展,我们绝对不打算在未来的Vue4中,进行这样的破坏性重大升级。

(We appreciate constructive feedback and agree that the Vue 3 upgrade experience isn't as smooth as it could be. Vue will keep evolving with the lessons learned, and we definitely do not plan to have disruptive major upgrades like this in the future.)

6.关于这篇文章结论:

在我看来,这篇文章整体上描绘的画面比实际要黑暗(dark)得多,有不必要的夸张,在少数情况下是完全不正确的信息。我希望至少能纠正我在其他评论中指出的一些事实错误。

七、总结讨论:

上述就是原作者提出来的问题以及尤大的回复,应该可以给各位正在考虑升级的小伙伴一点真实的参考意见。

最后

  1. 感谢阅读,欢迎分享给身边的朋友,

  2. 记得关注噢,黑叔带你飞!

亲,点这涨工资 

Vue2要不要升级到Vue3?(尤雨溪回复解读)相关推荐

  1. Vue 新 ref 语法糖提案引热议 尤雨溪回复

    近日,Vue 发明人尤雨溪在 Vue RFCs 下提交了一份新的 Ref 语法糖提案,该提案一经发布便引来了不少争议. 提案内容 这份提案就是在单文件组织(SFC)中引入一个新的script 标签写法 ...

  2. 跟尤雨溪一起解读Vue3源码笔记- Vue Mastery

    P1.介绍 1.什么是DOM或文档对象模型? HTML映射到一系列DOM节点,我们可以使用JavaScript进行操作 let item = document.getElementsByTagName ...

  3. 请停止搬运部署,尤雨溪官申Vue 3官方文档地址

    北京时间9月22日,Vue 框架创始人尤雨溪通过个人微博申明 Vue 3以及 Vited 的官方中文文档地址,它们分别是 v3.cn.vuejs.org,Vite 的官方中文文档地址是 cn.vite ...

  4. 尤雨溪:重头来过的 Vue3 带来了什么?

    作者:尤雨溪,翻译:CSDN 英文原文:https://increment.com/frontend/making-Vue-3/ 在过去的一年里,Vue 团队一直在开发 Vue.js 的下一个主要版本 ...

  5. 尤雨溪:Vue3.0 官宣彻底抛弃 IE 浏览器

    尤雨溪官宣 原因 自Vue 3的开发开始到2018年底,我们一直被要求提供IE11支持.许多用户询问Vue 3是否将支持IE11,我们最初的计划是发布Vue 3并使其稳定,然后添加稍后会支持IE11. ...

  6. 抄笔记:尤雨溪在Vue3.0 Beta直播里聊到了这些…

    前言 在 4 月 21 日晚,Vue 作者尤雨溪在哔哩哔哩直播分享了Vue.js 3.0 Beta最新进展. 以下是直播内容整理 1. 全新文档RFCs Vue.js 3.0 Beta发布后的工作重点 ...

  7. 学习尤雨溪写的 Vue3 源码中的简单工具函数

    大家好,我是若川.最近组织了源码共读活动.每周读 200 行左右的源码.很多第一次读源码的小伙伴都感觉很有收获,感兴趣可以加我微信ruochuan12,拉你进群学习. 初学者也能看懂的 Vue3 源码 ...

  8. 尤雨溪:Vue3即将成为新的默认版本!

    尤雨溪在github宣布,Vue3将在2月7号成为新的默认版本 这意味着后续如果有新项目使用vue开发,很多脚手架也会跟进默认选择vue3版本,vue3已经到了不得不学的地步了,春节在家没事的小伙伴, ...

  9. 创建VUE项目,vue-cli2.0版本和3.0版本的区别,将vue2.0项目升级为vue3.0项目

    创建VUE项目,vue-cli2.0版本和3.0版本的区别,将vue2.0项目升级为vue3.0项目 使用vue-cli2.0版本创建vue项目 创建前的准备 开始创建 创建过程 项目正常创建 使用v ...

最新文章

  1. PHP学习总结(7)——PHP入门篇之PHP注释
  2. tomcat版本号的修改
  3. 本科计算机学的都是皮毛吗,教唆高考生千万别学计算机专业,为什么相当于断人前途?...
  4. java 编码与基础数据类型
  5. 维他奶订单数据处理准确率100%背后的秘密
  6. 《SQL查询语句4》
  7. 持续集成之 Nuget 进阶
  8. 基于LiteOS Studio零成本学习LiteOS物联网操作系统
  9. Linux Virtual Server LVS Load Balancing
  10. python是什么类型的编程语言-Python是一种什么样的编程语言?解释?编译?汇编?机械?...
  11. python时间操作代码
  12. kruskal java_kruskal算法 源码(java)
  13. 蓝牙耳机测试软件apk_AndPods蓝牙耳机管理器.apkv1.5.2 免费版 Android
  14. 解决AssertionError Torch not compiled with CUDA enabled问题
  15. Simulink代码生成:Simulink Function子系统及其代码
  16. 【技巧总结】理解XXE从基础到盲打
  17. 1020 月饼 (25分) 冒泡排序
  18. 一文了解各种无线通信 - NB-IOT、LoRa、433、GPRS、4G、WIFI、2.4G、PKE
  19. unity 官方案例之刚体控制人物移动
  20. STM32-SWD仿真时PB3,PB4,PA15使用问题

热门文章

  1. 200亿买下推特后,马斯克宣布推特已死
  2. 华东师大计算机、南大软件、国防科大智能夏令营面经
  3. 安卓手机纯H5视频上传非常慢的问题解决
  4. 电脑自动关机是什么原因?4个解决方法,赶紧码住收藏!
  5. 银行卡多久不用会自动注销
  6. AI网络之最简编写方法:autokeras
  7. top100峰会有感
  8. LinkedIn首席科学家:创业公司如何善用数据,加入下一个千亿美元市场?
  9. Python操作窗口变大变小
  10. 就面了两次余额宝也能拿下offer?顺利定级阿里P8,一定要狂刷的面试题