最近我们团队要做一个单页面应用,主要功能有数据库增删改查、流程审批和 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 是主要由独立开发者尤雨溪开发。在调研之前我对两个框架都挺担心的,一个是新框架,一个是个人开发者开发的,会不会存在周边工具跟不上的情况。
比如有没有好看的 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 作为我们的前端框架。虽然可能收到的简历会少很多,但是我司能给出比水平相应的报酬稍高一点的报酬,所以应该能更容易地招到我们想要的人。
那么为什么不使用 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 的都是新手,你看本文就暗指那些培训班速成的应聘者。说不定 Vue 的粉丝会跟我一起吐槽这些人呢,气氛不知道多融洽。地图炮只会让你陷入敌军的汪洋大海!
如果我也被离职了,请各位同仁再也不要在中国安利 Angular 了,切记,切记……
完。