为何咱们从Angular 2迁移到Vue.js(为何咱们没有选择React)

在Rever(www.reverscore.com),咱们刚刚使用Vue.js发布了咱们的Web客户端的新版本。通过641次提交和16周的紧张开发,咱们很是自豪以前作出的决定。 8个月前,咱们的前端在使用Angular 2.确切地说,它使用的是Angular 2 beta 9.这是一个由外包公司编写的产品,咱们从不少层面上都没有彻底满意,从UX / UI到架构,在某种程度上,与Angular 2自己有很大的关系。javascript

在以前,我认可Angular 2 beta 9是与Angular 2.0不一样的产品,但这正是其中一个问题。从beta9到2.0.0,有8个beta版本,8个RC和2.0.0版本,总共有17个版本须要升级。咱们确实尝试从beta 9升级到2.0.0可是太多的api更改了使升级变得很是困难。此外,大约在同一时间咱们质疑Angular 2做为咱们选择的框架,Angular团队决定开始研究Angular 4.虽然他们承诺版本改变不会太大,这意味着当咱们完成升级到Angular时2.0.0咱们须要另外一次升级。多么浪费时间和仅有的资源。前端

咱们不喜欢的主要缘由是不喜欢Angular 2是Typescript开发的。我知道Angular 2能够和Javascript一块儿使用可是一样,使用Typescript的决定已经被内部使用了,根据个人理解,使用纯Javascript和Angular 2并非你应该使用Angular 2的理想方式。不管如何,摆脱Typescript意味着彻底重写项目。vue

我没有以为Typescript增长了实质性的价值,更糟糕的是,咱们注意到咱们的编码速度下降了。使用Typescript在Javascript上很容易作的事情就像定义一个简单的对象同样在Typescript上更复杂。我强烈建议您在开始使用Typescript以前阅读如下文章。这对每一个人来讲都不必定是正确的解决方案。java

我还记得使用Angular 1是多么容易,它有本身的不足,但与其余框架相比,Angular 2在途中失去了某些东西。关于Angular 2的结论很简单,Angular 1和2的惟一共同点是名称,它们是彻底不一样的框架。bootstrap

所以,考虑到咱们在未经测试的系统上有17个版本进行升级,来自业务的不少压力来编写新功能,大量错误和编写得很差的代码,原始开发人员再也不在团队中,只有一个开发人员(我)当时有许多其余职责,自从我使用测试版以来找到正确文档的问题,以及Angular 2转移到版本4.他的负面消息开始迅速地积累。api

咱们作了一个决议,若是咱们要花费那么多时间升级,那还不如看看别的框架。浏览器

应对服务器

第一个显而易见的选择是React,由于大部分公司都在使用它,而那些没用的人正在谈论它。因此这是一个选择,固然知道Facebook支持它是颇有帮助。可是,React自己不是一个简简单单框架,你须要添加额外的组件才能让它绽开光芒。markdown

Vue.js网络

Vue.js是一个新玩家,我之前从未据说过它,虽然他们刚刚发布版本2时咱们开始考虑不一样的框架。起初它引发了咱们的注意,可是仍是有必定风险的。

决策过程

咱们首先开始定义咱们的决策点。咱们知道框架须要具有如下条件:

  • 它应该是稳定的
  • 由强大的社区或一些大玩家支持
  • StackOverflow上有很好的文档或不少问题被解决了
  • 简单易学
  • 与Bootstrap集成
  • 小巧
  • 理想状况下,它容许咱们重用代码
  • 应该增长编码速度
  • 基于组件

咱们列出全部需求点之后,我不得不开始动手了,因此我给了React和Vue.js几天,分别审查了Google没法回答的每一个决策点。因为我对它们中的任何一个都一无所知,因此在两天结束时,我会从新评估我在多大程度上重写了咱们要迁移的实际项目的某些部分。

我选择重写的部分是:

  • 一些基本的API调用
  • 两个不一样页面的两个布局。
  • 用户相关内容的兼容性
  • 登陆表单和一些内容表单
  • 一个bootstrap模式

我对Vue.js的实力感到惊讶,在几天以内我实际上有了一个概念证实,以展现给团队的其余成员和个人CTO。我对Vue.js的基本概念有了很好的理解,定义了一个良好的,可扩展的架构,但最重要的是我很是喜欢用它编写代码的经验,我以为比React上手更快一些。

React比我想象的要可贵多,在Redux和MobX之间进行选择比有一个与Vue.js和Vuex这样的框架彻底集成的选项更有问题。这很简单,由于当没有框架经验时,它会让你更自信,而不是一个框架有一个正式的库来作某事。顺便说一句,我以为Vuex的适用性比Redux更容易,但可能这只是我的的一种感知,就像全部的学习曲线同样。

JSX也是一个问题,由于咱们没法重用HTML代码,而Vue.js确实容许咱们在某种程度上这样作。Vue文件实际上很是适合使用,由于我不喜欢内联模板。React将JSX / HTML与JS代码混合在一块儿,我只是不喜欢,由于我坚信分离关注点,看起来很丑。

编码速度

编码速度是Vue.js擅长的领域,不须要学习JSX是一个巨大的帮助。当另外一位开发人员加入该项目并在大约1小时的培训课程后的几个小时以后就开始项目开发。

这对咱们来讲很是重要,您能够经过打开vue文件当即看到它。它包含一个带有HTML和标签的模板部分,看起来相似于Angular 1,因此若是你作了一些Angular 1,它将很是熟悉。一个vue文件也有一个样式和纯javascript部分,你实际上使用javascript,你只须要学习一些关于Vue.js的东西来彻底理解它们。理解Vue.js属性(如方法,计算,属性,数据和建立)将使您了解开始编码所需的大约90%,很是简单。

文档

为了得到适当的速度,咱们须要良好的文档和Vue.js文档是一流的。指南,示例,问题和API都记录得很是好,涵盖了咱们在开发过程当中发现的全部疑问。咱们惧怕找到咱们会遇到的许多问题的中文文档,但事实并不是如此,一切都以英文提供。

问答

通过一个多星期的考虑后,Vue.js表现很是好,但令我惊讶的是,周围的问题都迎刃而解,由于以前没有人使用过Vue.js,我获得的惟一评论是“ 看起来很酷,但我尚未”用它“。React获得了最多的说起,Angular 2排在第二位。

我开始寻找具备Vue.js经验的本地人才,我确实找到了一些很是好的人,因此我开始认为我并不孤单,个人社交技术圈可能过小并且我不该该对事实上,我不认识任何人与Vue.js合做进行制做。

移动端

在咱们考虑Vue.js vs React的时候,咱们也在考虑重写咱们的移动应用程序,React Native看起来是一个很是好的选择。这对React来讲是一个很大的优点,由于Vue.js没有任何相似于React Native试图作的长远稳定的开发,因此在网络和应用程序客户端之间重用代码的可能性是一个巨大的优点,但我决定我不会考虑。毕竟,根据个人经验,使用Node.js,我在浏览器和服务器之间重用了很是少许的代码。

许可

在我写这篇文章时,有不少讨论,由于Facebook将React许可证更改成BSD +专利。根据Facebook,这个许可证旨在保护他们免受专利巨魔的侵害。这在咱们的决策过程当中并非最原始的,但我很高兴咱们没有采用React的方式,由于任何与许可相关的噪音都不是你想听的噪音。

最终,Facebook落后于React可能会成为项目的责任而不是实力,这就是为何拥有独立基金会或组织负责成功的开源软件项目一般会更好。Facebook应该作正确的事情,以IBM为例,当IBM收购Strongloop时,他们将Express.js捐赠给Node.js这样一个重要软件所属的基金会。社区的压力和IBM的意愿确保了软件的连续性。Twitter是另外一个很好的例子,他们在很是宽松的MIT许可下发布了Bootstrap,没有人在谈论Bootstrap的License问题。

最后的话

在我作出决定以前研究的许多网页中,有一个图表引发了个人注意,开发人员对Sacha Greif @sachagreif每一年进行的Javascript调查状态的满意度。我认可,正如做者所作的那样,这不是科学调查,但确实提供了大量信息,后来当咱们有更清晰的图片时,咱们的决策点证明了这一点,特别是关于Vue.js,由于咱们对它一无所知咱们研究的开始。您能够经过如下连接阅读Javascript状态。

整体而言,Vue.js是咱们评估的赢家,它在Stack Overflow上有不少问题,最简单的三个选项的官方文档,最小的代码库,与Bootstrap很好地集成,而且学习它是有强大的项目支持的Laravel和像阿里巴巴这样的大公司是一个很大的优点。没有像React这样大的社区并非影响我去用它的一个真正的因素,由于它自己足够大。

选择Vue.js是正确的选择,我花了一段时间来讲服个人首席技术官,我很是感激他老是问正确和棘手的问题并100%确定个人所作出的决定。若是我弄错了,我会后悔的。

最后整个决策过程真的颇有帮助,可是我可以快速学习的事实产生了巨大的变化,若是你喜欢就称之为直觉,可是学习一些东西真的快的时候让我对更复杂的问题有了很大的信心。我知道在实际开发过程当中我会面对。

我不是说React是一个糟糕的选择,我对社区如此之大感到惊讶,而且有充分的理由,虽然jQuery也有不少人使用,并无使它成为咱们想要的项目的良好框架/库去作。

Vue.js正在得到更多开发者的支持,咱们在开发过程当中看到了这一点,让咱们更加相信,咱们的选择是对的。