丑话说在前头,如果有错误,欢迎斧正,不要玻璃心。
说实话虽然在灵雀云用 Angular
做着企业级的应用,但我个人是很不认可它大而全的哲学的,虽然我也在 Angular
相关专栏发过几篇水文,但是习惯了 React
和 Vue
『纯粹』框架的哲学后依旧很不喜欢(不喜勿喷),但我很感谢 Angular
带我入了 rxjs
的坑,仅此而已。
Angular
的模块系统和 bundler
都是自己搞得一套标准『黑盒』,也就是说没办法在各个框架直接平滑地切换,比如 http 请求库,其他框架都可以随便选,一般比较通用的是 axios
,还有 axios-observable
支持 Observable
API,但 Angular
为了更好地支持自己的 DI 又搞了一个 @angular/common/http
,其实大可以把 DI
部分抽成一个库嘛(以前是单独抽了一个 DI
包的,后面又被合到 core
里了),这样所有框架都能使用你这个 DI
系统,岂不美哉?ts
打包非要整出一个 ngfactory
的概念,连基本的库打包都要有个专门的 ng-packagr
,真心受不了,学会 rollup
/webpack
已经很不容易了,换个前端框架还要学这个???还有各种 NgModule
的报错信息实在不忍直视,用了 @angular/router
后它还直接给我退出到上一个无报错的页面了,也就是调试的时候我还得再点一次保存页面的入口,如果还有错,还得继续来?!
说到这里实在不得不再吐槽 Angular
对 hmr(hot module reload)
的支持简直弱爆了,甚至可以说是『垃圾』,(我的个人体验来说 Vue
的 hmr
支持是最好的),开发个新功能页面不停地 reload, reload, reload... 我已经放弃挣扎了。
有人会说这些 @angular/cli
都帮你解决了啊,这还是刚刚『黑盒』的问题,这也是我自己写项目都是不用什么所谓的 cli
的,而 @angular/cli
里我只用会用两个命令:ng serve
和 ng build
,而且是在用 @alauda/custom-webpack 的前提下,因为:我压根儿不需要默认的那套打包配置,对我们的生产力反而是阻碍。为什么 Angular
不能往和其他框架一样纯框架的方向走呢?那些什么 ng lint/test
之类的命令真是醉了,这不是脱裤子放屁吗?自己加个 lint/test
脚本的事儿我为什么要去单独学啊?非得在angular.json
里配置?说到 angular.json
就更可笑了,连 js 格式都不支持?每个公司不同项目都要 copy/paste 吗?这也是为什么我在灵雀云搞了 @alauda/custom-webpack 的原因,因为自定义 webpack
配置在公司内部项目里也是通用的啊。
我们再来看一个 css
打包的问题,Angular
的方案是把 css
文件内容处理完转化成字符串,然后运行时由 @angular/core
进行插入,这有什么问题?问题大了,比如 A
/B
组件都在 styleUrls
里引用了 common.css
那么最终它会把 common
inline 到 A
和 B
上,也就是 css
内容是重复的,什么 vue-style-loader
它不香吗?明明是 bundler
该做的事情为什么要跑到框架层去做???
还有之前吹 JIT
到 AOT
优化的事儿,你看 vue
吹过吗?vue
/vue-loader
一直都是原生支持所谓的『AOT
』的,到了 Angular
这儿就变成了大优化了,而且所有相关库和 App
都要做一些必要的修改才能支持 AOT
,而且这个 AOT
呢还有各种乱七八糟的限制,一不小心就是 build error
说什么哪里哪里不支持箭头函数、哪里哪里得把变量导出去,可这些 JIT
的时候明明都是好好的。对了,JIT
和 AOT
的变更检测次数还是策略好像还不太一样,上次 ngChina
的时候有嘉宾演示了一下,这真不是劝退吗?
再来,Angular
的维护者们似乎都喜欢自己玩儿自己的,连 i18n
方案它都帮你内置了,当然我肯定是不用的,因为和其他框架的使用方式差异太大,实在诡异。我们之前是用的 @ngrx/translste
,今年我『二进宫』回来就把这部分精简重写了,只保留并定制我们自己需要的东西。也就是说官方内置的方案它不一定是最好的或者说是对所有人都适用的。
最后呢,再说说几个框架对 SSR
的支持,Vue
是有官方指导的,React
提供了基础能力,但是具体怎么玩儿全凭社区,Angular
我感觉是对这一块儿不上心的,好像到现在都只有 express
相关的指导,不过毕竟目标是『企业级应用』嘛,基本是不需要考虑 SEO 问题。那既然 Angular
是更面向企业级应用的,那么个人应用就没必要选它了嘛。那既然我个人应用都没有用过 Angular
我怎么敢在公司项目里去用呢?(此处手动狗头)
所以像 React
和 Vue
这种的轻量级框架才会更流行,因为它们才代表了自由,而我和很多人一样不喜欢被束缚,更何况只是一个前端框架,所以我的个人项目是绝不会考虑用 Angular
的。而公司的项目,当初选择 Angular
的大哥已经后悔并离职去写 React
了,而现在的我们这些接盘侠还将继续使用,毕竟历史包袱尾大不掉。但我仍然要感谢 Angular
带我走入 Observable
的世界,正如 @徐飞 所说,我相信 React
/Vue
社区经过 hooks
的洗礼也可能会拥抱天然组合的 Observable
。
写着写着好像变成了抨击 Angular
的文章,但其实不是,萝卜青菜各有所爱,有人喜欢框架的约束,让不太会写代码的人也能写出不那么差的代码,而我个人喜欢自由的代码,这样才能显示出我的架构能力不是?(继续狗头)
本文首发于 知乎专栏 - 1stG 全栈之路
1
precisi0nux 2020-01-02 07:02:37 +08:00 via iPhone
有理有据。
|
2
Mithril 2020-01-02 07:46:26 +08:00 2
自由的前提是每个人都有足够的能力和水平完成各部分组件的技术选型,调查,填坑和维护。如果你们组绝大部分人都不是前端开发专家,那么 Angular 可以让你的项目至少能活的更久一点。
Vue 或者 React 确实自由,但除非你能把关好每一个招聘,Review 每一行代码,不然有可能在各种地方埋下潜在的炸弹。 而 Angular 就是你找个后端开发,照着官方文档走一遍,那么大部分的功能组件的最佳实践就都知道是什么样了。随着项目进展逐渐能上手熟练的话,自己再抱怨发挥或者换 vue react 也可以。 特别是当一个项目会开发好多年,功能非常复杂而且有大量人员参与的时候,能不能换 http 库真的不算什么大不了的。你随便搞一堆的库进来,公司法务早晚会炸掉。 总的来说技术选型不能只考虑技术本身,自己公司的情况,未来的发展方向都得考虑进去才行。个人项目当然无所谓了,毕竟 Vue 简单好用。 |
3
murmur 2020-01-02 07:55:54 +08:00 2
如果说 ts+框架的严格要求就能开发出优美的代码
那 java 和 c#的项目就是天下第一好维护的项目 实际上不是 java 和 c#的项目一样一堆屎坑 所以框架和语法不能解决一切,该 review 还得 review,不能光凭 ts 就说 angular 比 vue 和 react 好维护 |
4
JounQin OP @Mithril 所以 Angular 受后端开发欢迎,前端开发不待见,也很容易理解嘛。
『随着项目进展逐渐能上手熟练的话,自己再抱怨发挥或者换 vue react 也可以。』 至于这一句不太认可了,像我们现在即使所有人都想换掉 Angular 都是不可能的,因为公司没有时间给你换框架从头再来,而 Angular 又是大而全不像 React/Vue 那么可以渐进式替换的。 |
6
Necfol 2020-01-02 13:42:18 +08:00
给三大框架都精通的大佬跪了
|
8
hantsy 2020-01-21 10:51:08 +08:00
对于熟悉后端开发的人来讲,特别是 Spring 的人,Angular 上手太容易,就这么简单。
|
10
Hanggi 2020-02-12 12:42:50 +08:00 1
感觉楼主说的这些都没有说到点上,都是楼主自己的问题。
就比如 ng test 是不是脱裤子放屁,可能是,但是你打一下 ng test --help 你就会发现它不只是一个脚本的别名。 其他的问题也都差不多,都是围绕“约定优于配置”。 不管你的语言、框架有多么自由,到最后还是要制定一套规则、一套约定,可能是你个人的规则,也有可能是公司的规则。框架越自由,就会产生越多不同的规则。 看看 React 的相关发展史就会发现出现了各种稀奇古怪的东西去补充它。现在刚接触 React 的人也很懵逼,Redux 是什么? MobX 是什么? Next 是什么?为什么你们公司的代码跟我们之前的代码完全不一样?用的是 React 吗? 相比 Angular,虽然也有很多改变但是整体思想和兼容性并没有太大改变,要知道最近一本版本里 Angular 把他们的编译器都换了。 感觉 Angular 的关键问题还是在推 2.X 初期那几波激进操作劝退了一大群人。这里感觉同一知乎的另一个回答更切中重点。 [知乎相关回答]( https://www.zhihu.com/question/355760849/answer/938934606) 楼主一直在说萝卜青菜各有所爱,但是这几点感觉真的算不上是多大的问题,只是楼主个人的体验问题。 而且,React 用的人多是真的,但是 Vue 只是在国内用的人多,国外很多网站和公司都有在用 Angular,并不少。 |
12
Hanggi 2020-02-26 13:38:18 +08:00
@JounQin 所以不要说的理所当然的,而且 Vue 用的人也并没有很多,也就国内稍微有点。
数据说话: https://www.npmtrends.com/@angular/core-vs-angular-vs-react-vs-vue https://npm-stat.com/charts.html?package=react&package=vue&package=%40angular%2Fcore&package=angular&from=2019-02-25&to=2020-02-25 angular 对应 1.x 版本,@angular/core 对应 2.x 以后的版本。 |
13
JounQin OP |
14
JounQin OP |
15
ddup 2020-04-23 17:21:55 +08:00
@murmur #3 ts 只是语言,angular 是框架,良好的框架能够较大程度上框住代码在规定的范围内,较大程度避免出现天马行空的代码。
|
16
rf99wSiT6IxH1Z23 2020-08-12 10:45:11 +08:00
之前 angular,现在 react 了( angular 有人死磕过源码吗?)
|
17
rf99wSiT6IxH1Z23 2020-08-12 10:45:49 +08:00
angular 国内尴尬,跟 vue 的状态是 gu 国内外刚好相反
|
18
erwin985211 2020-11-26 16:13:54 +08:00
接手 angular 项目,已经考虑离职了。真的想死
|
19
DDMAnthony 2021-04-19 19:56:06 +08:00 via Android
@erwin985211 那么现在离职了吗
|