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

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

最后送给前端们一幅图:

24914 次点击
所在节点    JavaScript
189 条回复
Matrixbirds
2016-07-18 01:26:57 +08:00
私一般都会在 top level 上 加一个`优雅`的注释
3dwelcome
2016-07-18 02:10:57 +08:00
@FrankFang128 没办法、后端可以自制工具、而前端基本只能使用工具。对于只能用工具的设计师来说、工具的先进程度直接决定了 b 格高低。
在人才辈出的年代、很难从设计上、本质和新人拉开明显差距、请允许前端设计师、用最先进的工具、来维护仅存的那点骄傲和虚荣。
Wangxf
2016-07-18 02:28:17 +08:00
从题主的意思可以看出来不想学习新技术
cuebyte
2016-07-18 02:47:07 +08:00
@Wangxf 从你的意思可以看出来很少思考
3dwelcome
2016-07-18 02:49:07 +08:00
@Wangxf 有本编程书叫算法的艺术、作者写了里面大部分算法、 90%的读者估计一辈子都用不到。

提主的意思是、不用编译的前端代码、已经足够满足现有需求、为什么一定要用类似 jsx 的编译语言、来写未来浏览器才可能支持的 js 语法。

其实无它、就是逼格高啊、哈哈。
Wangxf
2016-07-18 03:09:08 +08:00
@3dwelcome 新技术的出现一定是为了解决某种需求, react 的推出肯定是优先解决 facebook 的需求,你鄙视它只是因为你还没遇到 facebook 遇到的问题,虽然绝大多数是用不到 react 的,但是不能因此否定 react 存在的价值
3dwelcome
2016-07-18 03:19:05 +08:00
@Wangxf 我个人的观点、一开始就说过了、创造和改进工具、是人类的本能。和实际需求关系并不大。

我也没说 react 不好、只是说需要时间来完善、要培养到成熟期、需要一定的时间。

如果你一定要认为用未来 js 语法、是为了用户需求、那我也无话可说。
Wangxf
2016-07-18 04:05:17 +08:00
你也可以不用 jsx 啊,又没强制你用,用 jsx 的原因是为了更好的用 react ,不用 jsx 也可以,你可以理解为语法糖,哎,你这都没了解过就开喷,我无力…(葛优躺
3dwelcome
2016-07-18 04:33:36 +08:00
不用 jsx 的 react,逼格明显不够看.要说需求、 jQuery 也是为了满足需求、本质上并没有太大区别。 facebook 那帮高人、我相信用其他框架、也同样能完美实现用户需求。软件能达到的高度应该是看人、而不是看工具。

React 这种编译式前端、让发明者自己爽到的目的、远大于需求。对于重复代码的一种抽象。

作为码农、表示能用到让自己爽到的工具、是最开心的。
fuermosi777
2016-07-18 07:40:22 +08:00
这就是历史的车轮
lxrmido
2016-07-18 08:28:16 +08:00
现在复杂的前端需求越来越多了,多到了我要主动寻求节省时间的办法,于是自然而然地用上了,当然写简单页面的时候我是不用这些东西的。
1 、 es6 的语法能省好多好多好多时间,逻辑看起来也更清晰;
2 、 es6+webpack+gulp 能降低维护成本,因为代码的耦合性降低了,当然不能让前端新手维护老项目也是个麻烦事;
3 、学会这些,对一个熟悉前端的开发者来说,只要几十分钟;
4 、到目前为止,还没有 react 的什么事;
5 、然后来说 react , react 引入的虚拟 DOM 的概念让人茅塞顿开,从此解决了混乱的模板问题,但是 react 的学习曲线对于还没玩腻传统前端开发的人来说是挺可怕的,因此用不用就见仁见智了。

┑( ̄Д  ̄)┍

综上,就我个人而言,在开发过程中用上这么一大坨工具的原因就两个:
1 、省时间;
2 、传统前端架构玩腻了,而且我已经是全栈好多年了,不找点新的玩具怎么行;
imdoge
2016-07-18 08:38:54 +08:00
让我想起以前看过的这篇文章
http://codeofrob.com/entries/you-have-ruined-javascript.html
我是写 ng 的,确实觉得有些繁琐过度了,虽然原文观点太偏激
FrankFang128
2016-07-18 09:04:56 +08:00
@Wangxf 你猜错了。。。
leeloto
2016-07-18 09:05:07 +08:00
加了个前端新手群,里面整天讨论 react,vue,angluar 什么的,然后他们找工作又不找特别指定这些技术的公司,我就无语了,不知道怎么想的
FrankFang128
2016-07-18 09:07:38 +08:00
@fuermosi777 有遇到什么弊端吗?觉得可以忍受吗?
fuermosi777
2016-07-18 09:25:06 +08:00
@FrankFang128 弊端就是对于简单的小项目搭建起来很麻烦。我用一年时间经过了你描述的全部过程,目前在生产环境上使用 React 和 Webpack 。对于规模较大的项目确实方便,少考虑很多事情。但如果临时搭建个小原型,花在搭环境上的时间就已经比实际写代码的时间还多了。除此之外并没有什么特别讨厌的地方。毕竟这就是需求所致,是历史的车轮滚滚向前...
Geeker
2016-07-18 09:27:34 +08:00
用 Makefile 吧
messense
2016-07-18 09:33:09 +08:00
@fuermosi777 所以一般都会有 starter-kit 嘛,用 Yeoman 之类的从 template 生成基本的项目结构。
crabRunning
2016-07-18 09:34:11 +08:00
不错这个很 js ,一日不见,已换三代~!
lijsh
2016-07-18 09:43:23 +08:00
项目开始配置一次,整个团队都能复用,哪里麻烦了?

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

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

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

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

© 2021 V2EX