不依赖 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 刷新一下就能看到效果!为什么我要花那么多时间来学习转译工具,以及解决转译过程中的各种问题。

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

最后送给前端们一幅图:

24862 次点击
所在节点    JavaScript
189 条回复
FrankFang128
2016-07-17 20:53:50 +08:00
@fy 为何不能呢?用上这些的好处真的大于坏处吗?
songjiaxin2008
2016-07-17 20:55:26 +08:00
这也正是前端的魅力所在,相信过几年,才会沉淀出几个真正的有质量的可选项。
aivier
2016-07-17 20:56:33 +08:00
现在只用 Gulp ,不用 Babel 和 WebPack ,项目规模比较小,用 WebPack 写个配置文件都快相当于一个功能了, Babel 的话总感觉不靠谱,所以还是 NodeJS 上写 ES6 ,浏览器上的写 ES5
shenqi
2016-07-17 21:19:22 +08:00
@congeec 不错不错。
defmacro
2016-07-17 21:21:02 +08:00
跟楼主想到一块去了,我最近想实践的想法更极端一点,是完全不用 node.js 来做前端项目,只依赖于浏览器端的 JS 引擎。无奈太忙没有时间实践
Powered
2016-07-17 21:26:53 +08:00
核心还在于,单页面的需求匹配不了对应它的技术的热度
shiye515
2016-07-17 21:30:31 +08:00
你们干嘛呢?
修高速公路
有什么用?
可以跑汽车
我这牛车在上面能跑的更快吗?
牛车不能上高速
那你们这不都是白忙活
smallpath
2016-07-17 21:39:52 +08:00
这个, 我通篇都看到楼主在细数前端的进步, 怎么最后突然画风一变就成了批评了
hanai
2016-07-17 21:41:38 +08:00
这些东西都是为了前端项目工程化的,而不是为了你想的那种修改一下立即就看的 demo
Vincent720
2016-07-17 21:44:33 +08:00
不整点新东西怎么涨工资哦
FrankFang128
2016-07-17 21:55:13 +08:00
@smallpath 进步的同时,引入更多坑
FrankFang128
2016-07-17 21:59:17 +08:00
@shiye515 没觉得是告诉公路,顶多是有坑的高速公路, React 模板里报个错,你都不知道要去哪里调试。
FrankFang128
2016-07-17 22:01:17 +08:00
@ChiangDi 后台不会像前端一样抛弃原生的 DOM CSS 和 JS
ericls
2016-07-17 22:01:19 +08:00
最厉害的应该是 redux 这个东西让你可以写没有副作用的代码
LancerComet
2016-07-17 22:09:39 +08:00
@hanai 仁兄说道点子上了
kookxiang
2016-07-17 22:13:50 +08:00
H5 ?其实就跟前端说的 IE6 一个道理~
sarike
2016-07-17 22:34:30 +08:00
@FrankFang128 楼主重新思考了些啥?“不好用”到底是哪里不好用,楼主有真正考虑过这些新玩意儿真正解决的问题吗?我觉得这更像是给那些面对迅速发展的前端技术却懒得去学习的人的借口吧。

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

复杂的 Web 应用就一定是单页应用吗?再说了,为什么不用单页技术呢,现在单页完全可以在提升用户体验的基础上做到 SEO 友好。

当质疑一个甚至是一系列新技术的时候,我首先会想的是这些技术或者框架的创造者的从业经验、技术能力远大于我,他们面临的系统规模所带来的问题是我预想不到的,我相信我现在所质疑的问题是他们所综合考虑过的,这种想法会驱动我更深入的学习这项技术或这个框架,而且事实证明,随着对作者意图更深入的了解,自己之前的质疑会渐渐消除,甚至最终会喜欢上它……

犹记得乔帮主那句话: stay foolish stay hungry.
FrankFang128
2016-07-17 22:38:51 +08:00
@sarike 没有重新思考,只是吐槽。
在阿里用 React 开发基础 UI 框架算解决问题吗?

为什么要用单页面呢?好处是什么?坏处很明显,内存暴涨,维护困难。

预想不到的困难不是每个人都能遇到的, 90%的人遇不到。

用了 React ,然后,不喜欢。
littlebaozi
2016-07-17 22:56:06 +08:00
有感,之前想接触点 react ,推荐用 webpack ,配置文件写得头疼。不过各种配置好了,开发起来还是挺爽的。
geektony
2016-07-17 23:02:03 +08:00
@FrankFang128 抛开一切技术问题~ 技术界一直都是用脚投票的, star 数量,各种 React Conf ,组织,交流会。我相信比我们聪明的人很多,他们选择肯定有各种原因。大家也应该不会追求一种「不值得」的技术。很多时候,一个技术,不单单只为了产品本身,还有涉及产品开发的整个流程,例如协作、自动化等等。如果技术能提高团队生产力,那么就有存在价值。

另外,我在使用过程中,这些前端框架,技术都带给我高效的开发体验。我也很庆幸我在 Web 技术中的收货。

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

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

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

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

© 2021 V2EX