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

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

最后送给前端们一幅图:

24918 次点击
所在节点    JavaScript
189 条回复
repus911
2016-07-18 09:44:26 +08:00
不想用就别用 然而阻碍不了 JS 的发展
muziyue
2016-07-18 09:45:22 +08:00
我觉得最苦逼是的后端,以前还会写点 jQuery ,现在根本改不了前端的代码了
nonoroazoro
2016-07-18 09:49:12 +08:00
对于会玩的人来说,轻松写意自动化,这些就是起飞的工具。对于不会玩的人来说,学习成本太高,这些就是累赘。

先进不先进,依赖不依赖也没那么重要,互联网领域喜欢玩新的不是一天两天的习惯了,你看看传统行业都怎么玩的。

所以有啥好吐槽的,爱用不用,路都是自己走出来的。
nonoroazoro
2016-07-18 09:52:14 +08:00
@fuermosi777 可能要先想办法把 webpack 的 config 理一理吧,然后做个基础模板(能启动的最小项目,包含各种配置)的自动化,加到 mac 或者 win 的右键菜单里,一键创建小型(测试)项目,不要太简单啊。
nonoroazoro
2016-07-18 09:53:05 +08:00
@leeloto 开拓视野,业余时间多玩玩一些所谓的新技术,没坏处。
killerv
2016-07-18 09:59:40 +08:00
@muziyue 我也是这么感觉,前端时间才发现,原来前端已经不是简单的 jquery Css 这些了,跟不上了……
gimp
2016-07-18 10:00:50 +08:00
再给三年沉淀,等前端稳定了再深入学习。
simpx
2016-07-18 10:14:32 +08:00
@muziyue 感同身受

后端几个月过去,最多多一个 feature 。前端几个月过去,语法都看不懂了
learnshare
2016-07-18 10:17:34 +08:00
@FrankFang128 我旁边的同事在写 React ,反正我看过之后我决定先不学。

不是这门技术不好,而是用的人没好好用。嗯,不清真。
shiye515
2016-07-18 10:27:52 +08:00
@FrankFang128 内存没闲着?
FrankFang128
2016-07-18 10:44:34 +08:00
@shiye515 我 4G 的 Air ,开 Chrome 经常用光内存
FrankFang128
2016-07-18 10:46:05 +08:00
@lijsh 等项目大了, build 一次等一分钟, watch 一次等两秒,就麻烦了
FrankFang128
2016-07-18 10:47:01 +08:00
@messense template 三个月后就得换了 😂
FrankFang128
2016-07-18 10:49:49 +08:00
@fuermosi777 调试方面不觉得麻烦吗? 还有新人学习成本如何?还有一些 jQuery 的组件用不了了是不是都要重写?我的体会是隐性成本很多。我这里最大的成本就是,以前后端可以帮忙写页面,写在他看都不看全给我们前端了。少了很多人力!
zzNucker
2016-07-18 10:52:58 +08:00
@lxrmido 3 、学会这些,对一个熟悉前端的开发者来说,只要几十分钟;


我不信,学一个 webpack 都不止几十分钟,别说 es6+webpack+gulp 了,张口就来么。。。
zzNucker
2016-07-18 10:53:36 +08:00
就 webpack 那个烂文档。
话说其实我也觉得现在打包工具多的有点烂了。
FrankFang128
2016-07-18 10:55:44 +08:00
@simpx 后端几个月过去,最多多一个 feature 。前端几个月过去,语法都看不懂了
然后一个 feature 都没加,只是重构 😂
yolio2003
2016-07-18 10:55:46 +08:00
现实就是,有没有这些,写的都不优雅,有了这些,更不优雅了。。。
exoticknight
2016-07-18 10:59:13 +08:00
前端发展出这些东西的原因在于旧技术没有或者说很难应用上“软件工程”的思想
我刚开始做前端的时候,还是 jQuery 横行天下的时候,个人还是很喜欢的

不过 jQuery 太简单,随便学一学就会,应对复杂场景根本不行
作为对比,我实习时遇到过一个真实项目,原来是用普通 CSS 框架和 jQuery 以及基于 jQuery 的控件框架做的,只能在移动端上用
我用 vue + webpack 的开发方式重写了,加载文件体积平均减少了 50%,还能分开电脑端和移动端加载不同组件
开发过程完全不用管什么打包,压缩,拆分的事情,只需要用工程化的思想来写代码(还是爽爽的 ES2015

其实在远古的 jQuery 时代,也有很多人在想“不知道什么时候开始,前端开发已经到了不用 jQuery 的地步了。不依赖 jQuery ,还能优雅地写代码吗?”,所以楼主你看,历史不是简单的重复,但却有惊人的相似。
另外现在的浏览器对标准的支持度都很好了,写简单页面,连 jQuery 都可以不用,直接上原生 JavaScript 就很好(当然也因为 jQuery 越来越大了

拥抱新技术,岂不美哉?
FrankFang128
2016-07-18 11:06:54 +08:00
@exoticknight Vue 比 React 好的一点就是可以不用 JSX

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

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

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

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

© 2021 V2EX