到底什么是前端工程化

注:文章转载自 《透视前端工程化》
我自己觉得这个开篇比较深入我心,所以放在我的简书上,作为个人Mark。后面可能会将几篇试读也放上来,但其他篇目因为版权问题不好直接放,所以感兴趣的小伙伴们自取吧。


前端工程化是现代前端的必备技能

Web 前端这几年进化速度之快让人咂舌。很多前端工程师都不禁吐槽“学不动了”。如今已经不是 HTML、CSS、JS 前端三剑客仗剑走天下的时代了。

以笔者的亲身经历举例。笔者在 2011 年左右进入前端这个行业。当时工作的主要内容是,将设计稿切图转成静态页面,然后用 jQuery 插件实现一些页面的轮播图、跑马灯等交互效果。最后使用后端的模板语言如 smart、velocity 等将静态页面添加页面逻辑,代码交给服务端同学完成上线。整个过程中,JS 框架以 jQuery 为主,CSS 顶多用一下 Less。

再来看一下如今的前端工作方式,以笔者所在的快狗打车前端团队为例进行说明。前端的开发框架以 Vue 为主,使用 Webpack 解决接口 mock、代码检查、代码编译、构建、压缩、添加版本号、部署等全流程的工作。涉及到的技术点有 Vue、Vuex、ESlint、stylelint、mock、Webpack、Sass、PostCSS 等。对前端的要求相比几年前已经从单纯的 JS、CSS 问题变成了更多工程化为主的问题。

前端工程化是一个很大的话题,甚至到现在都没有一个准确的定义。笔者对前端工程化的理解是:一切能提升前端开发效率,提高前端应用质量的手段和工具都是前端工程化

实现前端工程化的好处

在前端领域越来越繁荣,越来越复杂的今天,学习前端工程化又能给我们带来哪些好处呢?

1. 极大提升开发效率

前端工程化的演进可以极大地提升开发效率。前端发展到现在,社区涌现出大量的优秀框架和工具,得以将前端工程师从繁重的工作中解脱出来。

举个例子,同样地给一个 dom 元素绑定一个 click 事件,使用纯 JS 可能这样做:

document.getElementById('myDom').addEventListener('click', function(e){
    // do some thing
})

我们引入 jQuery 的情况下,就简单了许多:

$('#myDom').click(function(){
    // do some thing
})

如果在 Vue 中,既简单又清晰:

<div @click="doSomething">
</div>

// ...
methods: {
  doSomething: function () {
    // do some thing
  }
}

如果有大量的事件绑定,没有开发工具的支撑,将有大量重复的代码需要写,想想就头疼。效率之低下可见一斑。

为了减少请求数,前端开发者通常会把大量尺寸较小、细碎的小图片合并成一张大的透明的雪碧图,在 CSS 中通过设置元素的 background-position 来使用图片。如果是完全手动去拼图、测距,将耗费大量的时间。但在雪碧图插件 webpack-spriteSmith 的帮助下,小图可以自动拼成雪碧图,并生成对应的 CSS 样式,插件能帮助我们处理这种毫无技术含量的体力活,效率加倍。

再举一个例子,没有前端脚手架的情况下,如果从零开发一个项目,需要花费大量的时间去初始化项目,比如安装各种 npm 包、配置各种 Webpack 的 loader、配置热加载。如果碰到环境搭建不顺利的情况,还需要花费很长时间去排查问题,单单一个项目初始化的动作就足以耗费一两天的时间。有脚手架工具的情况下,只需要简单的一个初始化命令,2 分钟的时间就可以完成项目的初始化。前端只需要聚焦到业务开发本身,效率大幅提升。

2. 降低大型项目的开发难度

首先前端工程化中提倡模块化、组件化。模块化的思想将大型项目的功能进行分解,分拆成一个个独立的模块。每个模块的开发难度直线下降。同时基于版本控制工具 Git,多个开发者可以并行开发,提升开发效率。项目在后期迭代的时候,由于每个模块相对独立,耦合性极低,一个功能的调整往往只需要修改其中的一个模块就可以,风险可控。不至于出现改动一处代码,引发全局问题的情况。

其次,前端工程化提倡用完善的流程规范和代码规范来保证大型应用的质量和可维护性。比如通过 ESlint、stylelint 对代码进行自动校验,通过评审、详细设计、开发、联调、测试、上线等每个环节的控制,确保项目的高质量和按时交付。向主分支合并代码必须经过 code review。流程规范确保了大型项目质量和可维护性的同时能够如期交付。

3. 更易获得面试官青睐

依稀记得六七年前去面试,遇到面试题大概是这种风格:“如何实现水平垂直居中”,“js 事件委托的原理是什么”,“常见的 css hack 方式有什么?”,“$(function(){})与 window.onload 有什么区别?”

今天面试遇到的面试题大概是这种风格:“能讲下 Vue 实现双向数据绑定的原理吗?”,“Webpack 中如何配置 Babel?”,“promise 和 await/async 的区别是什么?”

如果想进入大公司工作,前端工程化更是需要具备的基本素质。大公司的业务往往非常复杂,而且对稳定性的要求极高。与之相对应的前端工程化程度很高,各种配套的基础建设很成熟。比如美团点评体系化的工程化方案、移动组件库 Vix、自动化测试工具 Freekite、Hybrid 功能体验的解决方案 Titans 等。想得到这些公司的青睐,候选人需要在前端工程化领域有较深的积累。

前端的岗位技能已经发生深刻的变化。有人甚至戏言成前端工程师为前端配置工程师。

fouber(张云龙)曾经在自己的博文中说:

"前端是一种技术问题较少、工程问题较多的软件开发领域。”

所以前端工程化是每个现代前端人应该必备的技能。

谁需要前端工程化?

初中级前端工程师

对于初级中级前端工程师来说,由于工作经验较少,技术的宽度和广度都不足,对前端工程化的认知其实也是不够的,一上来整体掌握前端工程化肯定是有困难的。对于这部分同学来讲,首要的事情要学会去"用”,循序渐进地去了解其中的原理。例如在开发之余,自己学一学如何实现一个简单的脚手架工具,了解一下日常开发必备的脚手架是如何实现的,以点带面地学习里面用到的技术点。

期望晋升的前端工程师

前端工程化能力也是一个资深前端的必备技能。工作好多年了,如果连前端工程化都知之甚少,甚至连一个基本的脚手架都不能自己搭建,这是不及格的。如果将来带团队,怎么能指导团队同学,怎么能带领团队进步呢?如果去参加公司的晋升,也是没有说服力的。因为想要晋升高 T,必然需要在效率和性能优化等方面有深厚的积累和贡献。

所以,无论你是处在什么阶段,深入了解一下前端工程化都是极有必要的

前端应用越来越复杂,对前端工程化的要求越来越高。脚手架作为目前前端工程化的一个重要的组成部分,在开发过程中扮演了至关重要的角色。现在几乎所有主流前端几框架都有自己配套的脚手架,无疑给开发者带来了极大的便利。但正如上文所述,很多开发者由于本身入行较短,或者很多工作多年的开发者由于公司业务的原因,没有机会接触到前端工程化领域。

不了解没有关系,重要的是大家看到这篇教程,说明已经意识到前端工程化的重要性了,这就不晚。

笔者有一个前端工程化的实践型课程刚刚上线——《透视前端工程化》

点击了解《透视前端工程化》

本课程以 Vue 为例,结合笔者在团队中的工程化实践,带领大家从零开始搭建一个脚手架,将搭建脚手架用到的技术点逐一拆解,希望大家看完后,每个人都对脚手架和工程化思想有个较深入地理解。

相信在学完本课程后,大家至少有以下几点收获:

  • 对前端工程化有一个系统认知;
  • 能独立设计一套前端工程化解决方案;
  • 知识广度上有大幅提升;
  • 进入更好的平台,获得更好的薪酬。

感兴趣的话,还望大家多多支持!

最后

希望大家都能理解脚手架背后蕴藏的工程化思想,并且可以亲手完成一个脚手架的搭建。也希望大家在理解了前端工程化思想后,探索更多的方法,赋能自己的团队,共同推动前端工程化的发展。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269