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

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

最后送给前端们一幅图:

24819 次点击
所在节点    JavaScript
189 条回复
FrankFang128
2016-07-17 18:28:16 +08:00
How is digging going to get us out of this hole?
herozzm
2016-07-17 18:32:08 +08:00
已经跟不上前端的脚步,再用最原始的 jQuery
murmur
2016-07-17 18:33:16 +08:00
需求人员和用户需求都是相违背的,最简单的 PC 端上很简单的搜索引擎或者什么页面,到手机端都是翻不到底的今日头条,而且我也不知道哪里有这么多的资源可以加载。。。
是的,这里说的就是 ADUI ,是个应用都是今日头条,连垃圾清理结束的页面都是今日头条
实际上我就要一个搜索框或者天气预报啊, 200px 的高度都要不了。。
所以很简单的需求做的比登天还复杂,前端这水这么深有一大半是需求给挖出来的
congeec
2016-07-17 18:34:38 +08:00
elvba
2016-07-17 18:53:24 +08:00
不过我还是想问一下,文章中的 H5 指的是什么?
learnshare
2016-07-17 18:58:19 +08:00
不用 watch + LiveReload 的,因为我只想在该刷新的时候刷新;
不喜欢先编译后执行的前端开发流程,写代码 -> 保存 -> 手动刷新,这才是我的节奏;
只在发布之前用 Gulp 编译打包。

jspm 能很好地满足各种文件的热加载,除了 SASS 等少数速度奇慢(我用 LESS ),整体加载速度应该不比 watch -》 build -> LiveReload 模式差。

我目前在用 https://github.com/LearnShare/jspm-angularjs-1.x 这个项目结构。
对比过上面这个项目结构和 Angular2 的 ng-cli ,速度不错(虽然不太具有可比性):

ChiangDi
2016-07-17 18:58:24 +08:00
写后端不也是要各种框架和工具,这不是很正常
Balthild
2016-07-17 19:06:55 +08:00
我现在还在用 jQ ……

另外同问 H5 是什么
learnshare
2016-07-17 19:13:13 +08:00
@FrankFang128 对于整个前端的发展,目前的工具和框架都是想提高 HTML 、 CSS 和 JS 的生产力。

HTML 、 CSS 和 JS 作为应用最广泛的 GUI 开发技术,因为其历史原因,并不能胜任现代 Web 应用的需求。我认为与其不断修补和增加新功能,不如从零创造一套现代化的 GUI 开发技术更加容易。但短时间内,不太可能有 HTML 、 CSS 、 JS 及浏览器平台这样极高的普及程度。所以大家还是在这个平台上继续修修补补。
learnshare
2016-07-17 19:21:36 +08:00
@elvba
@Balthild

H5 ?这是一个骗人的概念。



可以认为这是一种营销的产物。比如某段时间,一切产品都是“纳米技术”、“航天材料”
steven_yue
2016-07-17 20:11:23 +08:00
其实如果从一开始就抛弃 javascript ,什么事情都没有了
fy
2016-07-17 20:20:48 +08:00
答曰:不能。有何意义?如果不能搞一个更好的轮子,何必急于向老的轮子开炮?
LancerComet
2016-07-17 20:25:23 +08:00
谁让前端项目的复杂度一直飙升,而 JS 的加载方式却自打出生没变过。浏览器原生模块化支持能解决一部分问题。
yiyizym
2016-07-17 20:28:49 +08:00
追新的永远都只是一小部分人,但他们往往叫得很大声。让人以为他们已经占据主流,但很快他们又会被下一波人掩盖。
yiyizym
2016-07-17 20:36:27 +08:00
话又说回来,我现在写前端还真不用 Gulp Babel Webpack 。

用户才不在乎什么 单页应用,他们只想尽快用到产品。轮子换完一个又一个,生产效率说实话真的提高了吗?
lwbjing
2016-07-17 20:37:16 +08:00
不管框架怎么变, jQuery 依然是大爷...
rashawn
2016-07-17 20:39:39 +08:00
从之我要用到的开源项目 就用了那些工具 我不会的话 ………
int64ago
2016-07-17 20:40:27 +08:00
我想这个问题很久了,确实太累了
wxt2005
2016-07-17 20:46:50 +08:00
还不是因为前端要做的事情越来越多了。
没什么不好啊,多学点东西,多涨点工资。
等到三五年都没啥变化,公司发现人招多了,那才是最恐怖的阶段吧。
FrankFang128
2016-07-17 20:52:56 +08:00
@lwbjing 现在 React 、 Angular 、 Vue 这些框架已经开始排斥 jQuery 了

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

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

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

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

© 2021 V2EX