在Rever(www.reverscore.com),我们刚刚发布了一个使用Vue.js的网络客户端的新版本。经过641次提交和16周的紧张开发,我们为自己做出的决定感到非常自豪。8个月前我们的前端使用的是Angular2。准确的说是使用Angular2beta9。它是一个外包公司写的产品,我们在很多层面上都不完全满意,从UX/UI到架构,在某种程度上,与Angular2本身有很大关系。早些时候,我承认Angular2beta9是不同于Angular2.0的产品,但这是问题之一。从beta9到2.0.0,共有8个beta版本,8个RC和2.0.0版本,一共需要升级17个版本。我们确实尝试从beta9升级到2.0.0,但是太多的api更改使得升级变得非常困难。此外,大约在我们质疑Angular2作为我们选择的框架的同时,Angular团队决定开始研究Angular4。虽然他们承诺版本变化不会太大,但这意味着当我们完成升级到Angular时2.0.0我们需要另一个One升级。多么浪费时间和资源。我们不喜欢Angular2的主要原因是Typescript开发。我知道Angular2可以与Javascript一起使用,但同样,使用Typescript的决定已经在内部做出,据我所知,使用纯Javascript和Angular2并不是使用Angular2的理想方式。无论如何,得到摆脱Typescript意味着完全重写项目。我不觉得Typescript增加了实质性的价值,更糟糕的是,我们注意到我们的编码速度变慢了。使用Typescript在Javascript上很容易做的事情在Typescript上比定义一个简单的对象要复杂得多。我强烈建议您在开始使用Typescript之前阅读以下文章。这不一定是适合每个人的正确解决方案。我仍然记得使用Angular1是多么容易,它有自己的缺点,但与其他框架相比,Angular2在这个过程中失去了一些东西。关于Angular2的结论很简单,Angular1和2唯一的共同点就是名称,它们是完全不同的框架。所以考虑到我们在一个未经测试的系统上有17个版本用于升级,来自业务的很大压力要编写新功能,很多错误和写得不好的代码,原来的开发人员不再在团队中,只有一个开发人员(我)当时还有很多其他职责,而且由于我使用的是测试版,所以我在寻找合适的文档时遇到了问题,Angular2移到了版本4。他的负面新闻开始迅速积累。我们做了一个决定,如果我们要花这么多时间升级,我们还不如看看其他框架。处理的第一个显而易见的选择是React,因为大多数公司都在使用它,而那些不使用它的公司则在谈论它。所以这是一个选择,当然知道Facebook支持它会很有帮助。然而,React本身并不是一个简单的框架,您需要添加额外的组件才能让它大放异彩。Vue.jsVue.js是一个新玩家,我以前从未听说过它,尽管当我们开始考虑不同的框架时他们刚刚发布了版本2。起初它引起了我们的注意,但其中存在风险。决策过程我们从定义决策点开始。我们知道一个框架需要具备以下条件:它应该是稳定的由强大的社区或一些大玩家支持良好的文档或在StackOverflow上解决了很多问题易于学习与Bootstrap集成小型且理想情况下它允许我们重用代码应该提高编码速度基于组件一旦我们列出了所有的需求点,我不得不亲自动手,所以我给了React和Vue.js几天时间来单独审查每个决策点,Google无法回答。因为我对它们一无所知,所以在这两天结束时,我将重新评估我重写了多少我们正在迁移的实际项目的部分内容。我选择重写的部分是:一些基本的API调用两个不同页面的两种布局用户相关内容的兼容性登录表单和一些内容表单一个引导模式我对Vue的强大功能感到惊讶。我实际上有一个概念证明可以向团队的其他成员和我的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和标签的模板部分,看起来与Angular1类似,因此如果您使用过一些Angular1,就会非常熟悉。一个vue文件也有样式和纯javascript部分,你实际上使用javascript,你只需要学习一些关于Vue.js的东西就可以完全理解它们。了解Vue.js属性,如方法、计算、属性、数据和创建,将使您获得开始编码所需的大约90%的内容,非常容易。文档为了获得适当的速度,我们需要好的文档,而Vue.js文档是一流的。指南、示例、问题和API都有很好的文档记录,涵盖了我们在开发过程中发现的所有疑问。我们害怕为我们遇到的许多问题找到中文文档,但事实并非如此,所有内容都有英文版本。Q&A想了一个多星期,Vue.js做的确实不错,但令我惊讶的是,周围的问题都得到了回答,因为以前没有人用过Vue.js,我得到的唯一评论是“看起来很酷,但我还没有“使用过它”。React被提及最多,Angular2位居第二。我开始寻找具有Vue.js经验的原生人才,我确实找到了一些非常好的人才,所以我开始认为我我并不孤单,我的社交技术圈子可能太小了,我不应该担心我不认识任何使用Vue.js进行生产的人。移动当我们考虑Vue.js与React,我们也在考虑重写我们的移动应用程序,ReactNative看起来是一个非常好的选择。这对React来说是一个很大的优势,因为Vue.js没有像ReactNative试图做的那样稳定的东西长期开发,因此在Web和应用程序客户端之间重用代码的可能性是一个巨大的优势,但我决定不考虑它。毕竟,根据我的经验,使用Node.js,我在浏览器和服务器之间重用了非常少量的代码。许可在我写这篇文章时,自从Facebook将React许可更改为BSD+专利以来,有很多讨论。据Facebook称,该许可旨在保护他们免受专利流氓的侵害。这不是我们决策过程中最原始的部分,但我很高兴我们没有走React的路,因为任何与许可相关的噪音都不是你想听到的噪音。最终,Facebook落后于React可能成为项目的责任而不是优势,这就是为什么拥有独立的基金会或组织负责成功的开源软件项目通常更好。Facebook应该做对的事情,以IBM为例,IBM收购Strongloop时,他们将Express.js捐赠给了Node.js这样重要的软件所属的基金会。社区压力和IBM的意愿确保了软件的连续性。Twitter是另一个很好的例子,他们在非常宽松的MIT许可证下发布了Bootstrap,没有人在谈论Bootstrap许可证问题。最后的话在我做出决定之前研究的许多网页中,有一张图表引起了我的注意,即SachaGreif@sachagreif每年进行的开发人员对Javascript状态的满意度调查。我承认,正如作者所做的那样,这不是一项科学调查,但它确实提供了很多信息,后来当我们有更清晰的画面时,我们的决策点证实了这一点,尤其是关于Vue.js,因为我们对此一无所知,我们开始了研究。您可以通过以下链接阅读Javascript状态。总体而言,Vue.js是我们评测的赢家,它在StackOverflow上有很多问题,三个选项中最简单的官方文档,最少的代码库,与Bootstrap集成良好,学习它很强大Laravel的项目支持和阿里巴巴这样的大公司是一个很大的优势。没有像React这样大的社区并不是我使用它的真正因素,因为它本身就足够大了。选择Vue.js是正确的选择,我花了一段时间才说服我的CTO,我很感激他总是提出正确而棘手的问题,并且100%肯定我的决定。如果我弄错了,我会后悔的。最后,整个决策过程真的很有帮助,但我能够快速学习这一事实产生了巨大的影响,如果你愿意,可以称之为直觉,但真正快速学习的东西让我对更复杂的问题有了洞察力。我知道我会在实际开发过程中面对这个问题。我并不是说React是一个糟糕的选择,我对社区的规模感到惊讶,并且有充分的理由,尽管jQuery也被很多人使用,但并没有使它成为一个好的框架/库我们想做的项目。Vue.js正在获得更多开发人员的支持,在开发过程中看到这一点让我们更加相信我们走在正确的轨道上。
