不依赖 Gulp、Babel、WebPack,还能优雅地写代码吗?

2016-07-17 18:25:40 +08:00
 FrankFang128

原文:http://iwritejs.com/complex-front-end/

纯属吐槽文,不服来辩。


不知道什么时候开始,前端开发已经到了不开一个 watcher 就无法工作的地步了。不依赖 Gulp 、 Babel 、 WebPack ,还能优雅地写代码吗?

那我就带你来回顾一下这一切是怎么发生的。

从哪开始说好呢?我们就从『前端打包』开始吧。

前端打包

很久以前(也就五年左右吧,但是五年前端已经大变样了),页面的 JS 压缩(混淆)一般是用谷歌的 closure compiler 做的。但是突然蹦出来个 Node.js ,前端开发者们就开始第一次小试牛刀了,用 Node.js 来做 JS 压缩,一般都是用 uglify-js 来做。

JS 压缩做了, CSS 压缩是不是也可以做? JS lint 是不是也可以做?自动测试是不是也可以做?文件合并是不是也可以做?

于是 grunt 应运而生,它可以帮你把这些事情都做了,只需要配置一个简单的 Gruntfile 即可。

同一时期, AMD 和 CommonJS 也出现了, Node.js 用 CommonJS 加载模块,浏览器用 AMD 来加载模块。前端们觉得可以统一一下,都用 CommonJS 来写,于是用上 browserify 之类的工具。

好了,这个时候一个前端项目需要有一个 Grunt (后来又有了 Gulp 等)任务用来打包前端资源,看起来就是一个标配了。

框架的兴起

前端们一直吐槽新手们用 jQuery 写出的「意大利面条」式的代码,于是发明的了一些框架,一开始比较火的是 MVC 框架(如 Backbone.js ),火了没多久,前端们发现 MVC 框架有很多相似的代码都是在做「绑定事件」「更新 view 」这些事情了,于是发现了 MVVM 框架(一种早年间被微软玩过的设计模式),最著名的库就是 AngularJS 。

此时的库都是不需要额外用 Grunt 做转译的。

直到 React 的出现。 React 背后的工程师(显示不是前端)发明了一种新的语法—— JSX ,把 HTML 和 JS 混合起来写。前端们看了一眼表示这才是写模板正确的姿势。唯一的问题是这种语法浏览器不支持,于是需要把 JSX 翻译成 JS 。

此时 Grunt 大概也因为性能太低被 Gulp 取代了。

于是此时用 React 的项目一定会去用 Gulp 将 JSX 翻译成 JS 。

ECMAScript 的发展

同时期, ES 发展也是非常迅猛。

IE 8 不支持 ES5 ,于是前端们说,「 IE 8 去死吧」,不想再支持 IE 8 了,因为那几年移动端发展迅猛,网页主要都是 H5 页面(不要问 H5 是不是 HTML5 ,不是 HTML5 ),所以很多前端确实不需要管 IE 8 。现在想想, Windows Phone 的失败,真是前端的福音啊。

前端就开始追新了,一定要第一时间用上最新版的 JS 语法。但是即便是 Chrome 和 Firefox 也不可能那么快就支持最新语法。于是前端说,不过就是在 Gulp 里再加一道转译嘛,用 Babel 把 ES 2016 的语法转译成 ES 5 就好了。

于是 Gulp 里又多了一项任务。

重新思考

经过这两三年的飞速发展,前端们是不是应该重新思考一下,做一个网页之前要加这么多 Gulp 任务的初衷到底是什么?是否解决了问题。

从目前的结果来看,基本可以总结为

  1. DOM 不好用,换成虚拟 DOM
  2. CSS 不好用,换成 CSS in JS
  3. 浏览器支持的 JS 不好用,换成 ES 最新版语法,然后转译为浏览器支持的 JS
  4. DOM Event 不用了,去新造一个 Event 机制。
  5. Gulp 用得太多了 watch 很慢,于是加上了 hot module replacement

基本把能抛弃的都抛弃了。

实际上这些变化非常适合复杂的 Web 应用,然而 90% 的页面根本不是单页面应用好吗!

能不能让我写一个 CSS 一个 JS 刷新一下就能看到效果!为什么我要花那么多时间来学习转译工具,以及解决转译过程中的各种问题。

总感觉『弊大于利』。甚至有的时候觉得这是『没有问题,创造问题也要上』。

最后送给前端们一幅图:

24907 次点击
所在节点    JavaScript
189 条回复
sarike
2016-07-17 23:02:28 +08:00
@FrankFang128 内存暴涨,维护困难

这是个技术问题,单页系统带来的是用户体验的提升,因为一个并非没有解决方案的技术问题而抛弃用户体验,我觉得这不是一个阿里技术人员的基本修养吧。 哈哈……
jsq2627
2016-07-17 23:04:32 +08:00
@learnshare Java Applet 、 Flash 、 Silverlight 在各自鼎盛时期客户端普及度都很不错,现在全挂了。我觉得根本问题不是技术和浏览器普及度问题,而是商业模式的问题,是闭源输给开源的案例。
现在缺乏的是一种能以开源模式发展的优秀 GUI 框架,好在现在前端领域得到了业界足够的关注,即使目前的努力都集中于对现有 HTML/CSS/JS 的修补,我还是相信未来会有更多像 React 一样开创新基础体系的框架。
kokdemo
2016-07-17 23:04:55 +08:00
工程量决定工具。
shiye515
2016-07-17 23:05:54 +08:00
@FrankFang128 那也别用 css3 动画了 gpu 负载暴涨
bdbai
2016-07-17 23:13:16 +08:00
@FrankFang128
> React 模板里报个错,你都不知道要去哪里调试。

姿势问题。调试用未压缩的 React ,它会告诉你哪个组件出了错。加了 source map 的源码配合 Chrome 的调试器单步进去,周围看看就出来了。
scarlex
2016-07-17 23:40:51 +08:00
我写 demo 级别的东西都不需要用 gulp , babel , webpack 之类的工具啊...
murmur
2016-07-17 23:48:42 +08:00
@sarike 赞同这个观点,但是我一直在想,这么多年了,像支付宝+淘宝的组合,越来越少,刚需越来越少,如果撤掉砸的钱,还会有多少企业活下来。。
现在是个 app 都想成为今日头条,但是用户需要的是什么
3dwelcome
2016-07-18 00:05:26 +08:00
@murmur 我觉得用户并不需要什么、现在的前端、很大一部分是做 app,最后的命运绝大部分、都是被 app 红海吞噬淹没、这和前端的质量、并无太大关联。
所谓的编译式前端技术发展、更多的是对于自我的一种追求升华。而不是为了更好的满足用户需求。
jhdxr
2016-07-18 00:11:13 +08:00
这个问题我也思考过,不光是前端,其实后端或客户端也有这样子的现象 /问题,只不过没有前端这么显著而已。
我对这个问题的态度是,本身只是为了解决一个小问题所做的工具 /采用的方法,很多时候到后来为了 KPI/名望,把它越做越复杂,然后最后没法维护了就再另起炉灶来一个。

1. 加在一起就是灾难
2. 相信历史的沉淀
FrankFang128
2016-07-18 00:23:41 +08:00
@shiye515 GPU 一般是闲着的呀,降低 CPU 负荷蛮好
FrankFang128
2016-07-18 00:25:41 +08:00
@geektony 真要论用脚投票的话,
FrankFang128
2016-07-18 00:28:21 +08:00
@geektony 真要论用脚投票的话,使用 jQuery 和 Backbone 的人,远多于新的。 至于 conf ,一般都是找新技术说,不会找成熟的说。只能作为佐证,不能作为主要论据。
geektony
2016-07-18 00:36:31 +08:00
@geektony 如果我们这么看呢,回到 jQuery 和 Backbone 推出的时代,它们也遇到 React Vue 现在的情况。其实运用各种手段都能解决问题,剩下的更多是使用者本身的决定。人才是技术的关键,而不是技术本身。所有的所有,最终都回到主观意识。创新本身就是我们自身对世界的探索,拥抱一下嘛~ 哈哈 :)
qwerasdf
2016-07-18 00:50:57 +08:00
“ 实际上这些变化非常适合复杂的 Web 应用,然而 90% 的页面根本不是单页面应用好吗 ”
但是 90% 的付薪水的工作,都要求用到那些东西, so ...

you want a work with Gulp 、 Babel 、 WebPack 、 React , or no work in this field ...?

个人项目基本用到 browserify 就完事了 ( 后端数据比较简单 ) ,公司项目跟 React ( 后端数据也比较简单,但要为变复杂的可能性作准备 —— 包括公司项目的复杂和我的下一步跳槽 作准备,有备无患 ) 。不用辩
FrankFang128
2016-07-18 00:54:06 +08:00
@qwerasdf 我就喜欢你这样的,坦白承认不是为了用户需求而使用新技术。
3dwelcome
2016-07-18 00:59:38 +08:00
@FrankFang128
后端其实也在进步的、比如 c++、 conference 上不断的推出新语法、 c++11->c14->c17. 要说解决的多大的问题、也并没有。大神用 c99 、照样能写出牛比的代码。
只是人类的天性就是创作工具、使用工具、进化工具。这是使命、也是必然规律、和需求无关。现在 gulp 投票的人不多、再反复重构后、终将会替代现有的前端工作流。唯一需要的、只是时间的沉淀。
很多时候、想要跳的更高、就必须往后退一下、这阶段叫畜力。不能因为新的前端工具解决问题的效率不如老工具、就扼杀他们的存在价值。先阶段他们更多的是在探索、终有一天、会颠覆和影响浏览器的发展、我们需要的是多一点的耐心。
RaymondYip
2016-07-18 01:10:36 +08:00
看情况把, 写几个简单的静态页, 就加个 Browsersync 和 Gulp 我觉得很好。。
复杂的 Babel, webpack react 加起来不错
Powered
2016-07-18 01:11:34 +08:00
单页面应用 seo 不友好,所以这些单页面框架显得被高估
FrankFang128
2016-07-18 01:23:50 +08:00
@3dwelcome 但是后端没有出现前端这种『不用新工具的都是懒鬼』这样的『政治正确』的观点。现在前端你敢说一句 React 不怎么好啊,都会被认为是老古董了。
but0n
2016-07-18 01:26:24 +08:00
还是搞底层单纯些

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/293050

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX