最近我们团队要做一个单页面应用,主要功能有数据库增删改查、流程审批和 Feeds 展示等,我在比较了 Angular 和 Vue 之后,最终选择了 Angular。

我们团队中,既有人使用过 Angular 也有人使用过 Vue,但是我只能选择其中一个,这其实是一个很艰难的决定,但是请相信我,如果你的需求跟我类似,而且正在选择合适的前端框架,那么我的文章会对你有很大帮助。

你可能奇怪为什么我没有考虑 React,理由我会最后说。

以下是我选择 Angular 而不是 Vue 的原因:

我需要一个框架
我在比较了 Angular 和 Vue 后,发现 Vue 似乎并不是一个框架,而是一个需要自己去组合的工具集(也许我说得不对,欢迎留言);Angular 则已经考虑到方方面面,内置了我需要的几乎所有功能。

我需要的就是这样一个真正的框架,包含了组件化方案、模块化方案、测试方案、表单验证、路由、国际化方案和安全方案。我发现 Angular 甚至连代码风格都给出了建议。

我问了下使用 Vue 的同事,他告诉我 Vue 的生态也提供了这些功能,不过需要自己一个一个地添加。vue-cli 会在生成项目的时候安装一些官方推荐的工具,如 vue-router、ESLint、Karma、Mocha、Nightwatch 等。

通俗来说就是「Angular = Vue + vue-router + axios + karma + 表单验证插件 + i18n ……」

我明白 Vue 这样做确实很符合它的 slogan:「渐进式」。 你可以选择只用 vue,或只用 vue 和 vue-router,甚至用其他的 router 替换 vue-router,你想怎么玩都可以,相信很多前端会喜欢这种方式。

我以前也喜欢什么都可以自己定制。但是现在我不喜欢了。我们之前的项目曾经历过将代码检查工具从 JS Lint 改为 JS Hint,再改为 jscs,最后改为 ES Lint 的过程;还经历过打包工具从 r.js 改为 browserify,最后改为 webpack 的过程。这些过程着实恶心到我了。

JS 社区更新得实在太快了,总有一些新奇的工具出现,工程师们总忍不住尝新的念头。但我更希望队员们关注我们的业务,而不是总想着将框架中某个稍显落后的工具换成更酷更新的代替品。

所以我倾向于 Angular。它有以下优势:

Angular 的工程师将我们需要的所有功能做了不错的整合。如果使用 Vue,我可能还要面临更多选择。
Angular 的一份文档涵盖了开发中的方方面面。如果使用 Vue,可能每个功能要去看不同的文档。
Angular 更强势更主观,它的文档对于如何完成某个功能给出了明确的建议。我们团队的成员有不同的编程背景,虽然有三个全职的前端,但是还有十几个 Java 和 Python 程序员,他们也可能会参与前端工作,Angular 的文档能让这些成员快速适应环境。
上面是我选择 Angular 的主要原因:Angular 是一个完整的框架。

生态及流行度
我知道 Angular 是 Google 一个团队在抛弃 AngularJS 1.x 之后重新开发的一个框架,而 Vue 是主要由独立开发者尤雨溪开发。在调研之前我对两个框架都挺担心的,一个是全新框架(相比于 AngularJS 1.x),一个是个人开发者主导的,它俩会不会存在周边工具跟不上的情况。

比如有没有好看的 UI 框架。后来发现两个框架不分伯仲,选择都挺多的,Angular 有 ng-bootstrap、OnsenUI 和 material2 等,Vue 有 bootstrap-vue、vue-material、Element UI、Mint UI 等。不过我倒是发现 Angular 的中文社区貌似并不活跃,没多少产出。

根据我以往对 UI 库的经验,不管我选择什么 UI 库,都会有需要自己二次开发的情况,所以我也可能会使用那些跟框架无关的 UI 库,比如 Bulma,这终究是要根据设计图来决定的。

然后我又看了看 Google Trends 上的趋势,想知道 Angular 和 Vue 谁的支持者更多。

这是世界范围内的搜索热度,看起来大家选框架的话还是会优先看看 Angular:

下面是中国范围内的搜索热度,对比起来看很有意思:

看起来中国市场里 Angular 的份额被 Vue 吃掉了,而 React 则一直在慢慢上升。

我主要还是参考国外的趋势,不参考国内趋势(因为我们使用的工具几乎都是国外的开源工具),所以总体感觉在国外 Angular 会比 Vue 更「火」一些。而且国外前端团队应该早就在各个框架中选定了自己喜欢的一款,估计未来不会有特别大的变化。

最后我还看了一下 npm 的下载情况。

@angular/cli 的情况如下

vue 以及 vue-cli 的情况如下,二者加在一起还比 Angular 少一点:

总体来说 Angular 还是稍微「火」一点。虽然我知道搜索量和下载量并不能说明社区的活跃度。

另外我还看了一下 React 的下载量,React 过去一个月的下载量居然接近 500 万次。比 Angular 和 Vue 的总和加起来还要多得多得多,搞得我有点动心想改成 React 了。

更高的门槛
我在选择框架时还要考虑的一个问题是:招聘。

过去一年我们收到很多前端简历,很多都使用 Vue 仿饿了么、仿网易云音乐、仿微信、仿今日头条。但是,我们基本没有录取这些应聘者。一开始我们觉得能仿了一个饿了么能力应该不错,但是面试起来却发现他对 JS 的一些基本概念都搞不清楚。

Vue 确实厉害,能让对 JS 不是很熟悉的人仿出一个项目。

不过,我宁愿看到简历里的项目是用原生 JS 仿的项目,至少我能确定他 JS 基础还不错,框架不会可以教。应聘者用 Vue 包装自己后,我都看不出他的真实能力,只能面试详细问,效率真的很低。

这主要是因为

Vue 的中文文档太好了(Angular 的中文文档还是存在滞后性的)。
Vue 相关的视频教学太多了,新手一周就可以搞出一个「项目」出来,装上 element-ui,写几个组件,加个双向绑定,再发几个请求,「项目」就成了。
我还发现,Vue 并不是那么易学,Vue 只是「看起来」易学。很多面试者只是学会了 vue、vue-router 和 vuex,对其他的功能一概不知,比如测试、安全和部署方面的知识。实际上,如果一个开发者真的想把 Vue 搭建成一个像 Angular 这样的框架,那么他要懂的知识其实比 Angular 还多。

这就导致了

如果一个面试者在简历里自称会 Vue,我并不确定他到底会什么,英语水平怎么样。
如果一个面试者在简历里自称会 Angular,那我至少能预期他知道 TypeScript、依赖注入、Service 和 E2E 测试等,而且他的英语阅读能力不会太差。
所以我这次打算加点门槛,用 Angular 作为我们的前端框架。虽然可能收到的简历会少很多,但是我司能给出比水平相应的报酬稍高一点的报酬,所以应该能更容易地招到我们想要的人。

P.S. 就在我写文章的这会儿功夫,Angular 中文文档已经更新到最新版,所以不要被文档所困扰了。

那么为什么不使用 React 呢?
因为这篇文章是为了推广 Angular 呀!这是一篇软文呀!

全文就三个观点:

Angular 比 Vue 全
Angular 比 Vue 火
Angular 比 Vue 门槛高
但是每个观点里都提到了 Vue 的优点:

Vue 是渐进式的
Vue 在中国火
Vue 对新手友好、
但是整体读下来你会觉得 Angular 也挺强的,不是吗?我并没有说 Vue 的一句坏话哟。

本文内容存在虚构,只是为了做一个示范,让你知道到底应该如何推广 Angular,以下是注意事项:

强调这是个人观点,而不是普遍情况。你看本文标题是《为什么我的新项目使用 Angular 而不是 Vue》,就算我没有采用 Vue,那也是由我的团队构成和实际需求决定的,不是 Vue 的问题。
态度诚恳。不要为了推广 Angular 就故意贬低 Vue,说了 Angular 的优点也说下 Vue 的优点,然后来一句「我依然选择 Angular」就好,我就是这么任性,多诚恳。
不要逐个功能对比。Angular 强在提供了整体方案,那我们就以这个为主要论点,不再关注局部的优势了,以免陷入细节上的争论。
不要地图炮。不要因为 Vue 对新手友好就说用 Vue 的都是新手,你看本文就暗指那些培训班里面一大撮速成的应聘者(连 this 都没搞懂的人)。说不定 Vue 的粉丝会跟我一起吐槽这些人呢,气氛不知道多融洽。地图炮只会让你陷入敌军的汪洋大海!
如果我也被离职了,请各位同仁再也不要在中国安利 Angular 了,切记,切记……

发表评论