我读《前端工程化:体系设计与实践》

1,029 阅读4分钟

《前端工程化》这本书也是买了很久,当时读了几个章节,觉得比较浅显。这个周末拿出来又从头到尾翻了一遍,总体的评价一般,可以看看目录脉络,打分 3/5。取决于读者的阅读速度,如果三天看完,我感觉不亏。

这本书出版于2018年1月。书中使用的 Webpack 配置代码还是 V1,V2时期,目前已经更新到 v5 了。所以书中引用的代码估计实用性不太高,大概扫一眼,看看大致是干什么就可以。具体到现实问题,肯定还是得去现查最新的文档。

第一章讲了一下前端的开发历史,SPA的出现以及优缺点,为什么需要前后端分离等问题。算是一些常见面试问题的总结吧。第二章提到的 Yeoman,15年我使用 angular.js 的时候,基本上项目都是用yo搭建。估计现在使用量也下降很多。目前的主流框架都提供了自己的 CLI 工具供用户快速搭建项目。日常开发中,一个团队里说不定好几个小组都有自己的脚手架生成器。第三章相对来说值得阅读。讲了一些常用loader,plugin的使用场景。module 和component 的区别,强制缓存和协商缓存,覆盖更新和增量更新,hash的作用,静态资源 CDN 部署等。对于入门的工程师来说,是一个比较好的了解构建的方向。再后面几章就有点浅尝辄止了,一笔带过。

关于模块和组件的区别——这点我与作者意见相左。看到他引用的英文描述我觉得没有问题,但是中文解释(P102)我不能认同。根据英文的翻译,模块是设计实体,组件是运行实体。模块应该是包含组件的,所以他举得例子“一个button是模块,一个包括多个button的导航栏是一个组件”我认为是恰恰相反,导航栏是模块,模块中包含了若干按钮的组件。关于这点,作者也提到这两者定义的模糊,我这里也只是表述一下自己想法。

剩下的我想谈一谈我对前端工程化的认识。“前端工程化”这个词,我是从准备回国,开始频繁和国内公司面试才得知的。每次面试都一定会有人问我,你怎么看待前端工程化。给我的感受是怎么前端不算工程吗?为什么还要特地说一下工程化呢?当时是确实不明白这个概念。我理解的工程,不论前端后端,都需要一套完善的编译,构建,部署,上线流程。在美国如果出现在JD里,可能会明确写需要你有CI/CD经验,需要你熟悉 git version control,需要你了解 docker 或者有 AWS 经验,会很明确技术栈。现在回过头去看中美之间的面试,侧重确实很不一样。在经验问题上,国内面试有点缥缈,问一些很大的问题,工程化的看法,有点像“道”;美国面试会问你AWS怎么玩,Jenkins怎么用,持续集成怎么弄,比较具体,有点像“术”。

前几天,我想绘制一张前端的知识图谱,有一部分就是前端工程化。但是当时是用英文书写的,所以我一直在想一个贴合的翻译,想了好几个,都觉得很蠢。所以我突然想去查查在英文世界里,有没有这个概念。很遗憾到目前我还没有搜到针对这个词的很精准的对应。如果有朋友了解的,希望可以不吝赐教。不过我在搜索的过程中,找到 Uber Eats 技术团队写的一篇文章,如果感兴趣的话,可以看看 Counting Calories: How We Improved the Performance and Developer Experience of UberEats.com。文章的一部分提到了他们是怎么去做工程化的。但是依旧,没有“工程化”这种概念名词出现。所以如果要我选一个前端工程化的英文翻译,我想我可能会用 Automate。

叫什么不重要,怎么做和为什么做比较重要。