重磅推荐
【产品特色】


【编辑推荐】

【本书已更新至第2版,建议购买新版】

(1)作者是资深的前端工程师,现就职于美国某互联网企业,曾就职于去哪儿,负责前端基础架构的建设。

(2)作者是资深的Webpack技术专家,是知名打包工具YKit的主导者和核心开发者,积累了丰富的实践经验,是Webpack的布道者。

(3)本书从功能特性、工作原理、应用实践、性能优化4个维度对Webpack进行了全面的讲解,系统性、深度、实战性兼具。


【内容简介】

这是一本能指导读者零基础快速掌握Webpack并轻松进阶的实战性著作。

作者是资深的前端工程师,在Webpack领域有深厚的积累,是知名开源打包工具YKit的主导者和核心开发者。本书从功能特性、工作原理、应用实践、性能优化4个维度对Webpack进行了全面的讲解,内容上尽力避免了网络上已经公开发表的各种资料和文档,而是从作者的实际经验出发,将更有价值的内容呈现给读者,尽量帮助读者少走弯路。

全书一共10章:

第1章是一个快速的指引,介绍了Webpack的概念、适用场景、开发环境搭建,以及如何快速上手。

第2~7章详细讲解了Webpack的各项功能特性及其工作原理,同时讲解了它们的适用场景,以及如何付诸实践。

第8~9章深入总结了打包的性能优化和开发环境的优化。

第10章介绍了其他打包工具并对这些工具进行了各项特性的对比。


【作者简介】

居玉皓

资深前端开发工程师,目前就职于美国在线流媒体平台Tubi TV,曾就职于去哪儿网,负责前端基础架构的建设,并主导开发了知名的开源打包工具YKit。

长期专注于前端构建领域,对Webpack有深入的研究,积累了丰富的实践经验,在国内为Webpack的发展和普及做了较多的努力和贡献。


【媒体评论】

YKit是去哪儿的开源项目,是Webpack在构建领域的优秀实践。玉皓是YKit的核心开发工程师,由他来写Webpack方面的书是非常合适的。本书聚焦在Webpack及上下游的必要知识点上,Webpack机制和周边常用工具模块讲得比较透彻,简单易懂,从实战角度对代码分割、HMR、plugin、loader等进行了分析。本书非常适合想深入学习Webpack的读者。

——狼叔(网名i5ting) Node.js布道者/Node全栈公众号作者

在Webpack被广泛应用之前,基于Grunt、Gulp、RequireJS的打包工具在配置文件、长效缓存、代码热替换、代码分割等方面支离破碎的方案消耗了前端开发者相当多的时间精力,Webpack的流行无疑给前端开发构建带来了明亮的指引。

——题叶

严谨、认真、细心、极客是玉皓的标签。几年来,他在前端构建领域倾注了非常多的精力,并打造出了YKit这样一个覆盖“去哪儿”全业务线的前端利器,并将其开源。本书很好地承载了玉皓的丰富经验,毫无保留地将Webpack的魅力向大家娓娓道来。我相信任何前端从业者通过阅读此书,都能看到Webpack的全貌,并将之应用到实践之中。它像是一个领路者,非常精巧地帮助大家快速迈过学习的障碍。

——杜瑶原去哪儿网高级技术总监/美团研究员


【目录】

第1章 Webpack简介1

1.1 何为Webpack1

1.2 为什么需要Webpack2

1.2.1 何为模块2

1.2.2 JavaScript中的模块3

1.2.3 模块打包工具4

1.2.4 为什么选择Webpack5

1.3 安装5

1.4 打包个应用7

1.4.1 Hello World7

1.4.2 使用npm scripts9

1.4.3 使用默认目录配置10

1.4.4 使用配置文件10

1.4.5 webpack-dev-server13

1.5 本章小结15

第2章 模块打包17

2.1 CommonJS17

2.1.1 模块18

2.1.2 导出18

2.1.3 导入20

2.2 ES6 Module22

2.2.1 模块22

2.2.2 导出23

2.2.3 导入24

2.2.4 复合写法26

2.3 CommonJS与ES6 Module的区别26

2.3.1 动态与静态26

2.3.2 值拷贝与动态映射27

2.3.3 循环依赖29

2.4 加载其他类型模块33

2.4.1 非模块化文件34

2.4.2 AMD34

2.4.3 UMD35

2.4.4 加载npm模块37

2.5 模块打包原理38

2.6 本章小结41

第3章 资源输入输出42

3.1 资源处理流程42

3.2 配置资源入口44

3.2.1 context44

3.2.2 entry45

3.2.3 实例47

3.3 配置资源出口50

3.3.1 filename50

3.3.2 path53

3.3.3 publicPath54

3.3.4 实例56

3.4 本章小结57

第4章 预处理器59

4.1 一切皆模块59

4.2 loader概述61

4.3 loader的配置63

4.3.1 loader的引入63

4.3.2 链式loader65

4.3.3 loader options65

4.3.4 更多配置66

4.4 常用loader介绍70

4.4.1 babel-loader70

4.4.2 ts-loader72

4.4.3 html-loader73

4.4.4 handlebars-loader73

4.4.5 file-loader74

4.4.6 url-loader76

4.4.7 vue-loader77

4.5 自定义loader78

4.6 本章小结82

第5章 样式处理84

5.1 分离样式文件84

5.1.1 extract-text-webpack-plugin85

5.1.2 多样式文件的处理87

5.1.3 mini-css-extract-plugin89

5.2 样式预处理91

5.2.1 Sass与SCSS91

5.2.2 Less93

5.3 PostCSS94

5.3.1 PostCSS与Webpack94

5.3.2 自动前缀95

5.3.3 stylelint96

5.3.4 CSSNext98

5.4 CSS Modules99

5.5 本章小结100

第6章 代码分片101

6.1 通过入口划分代码101

6.2 CommonsChunkPlugin102

6.2.1 提取vendor105

6.2.2 设置提取范围106

6.2.3 设置提取规则107

6.2.4 hash与长效缓存109

6.2.5 CommonsChunkPlugin的不足111

6.3 optimization.SplitChunks112

6.3.1 从命令式到声明式114

6.3.2 默认的异步提取115

6.3.3 配置116

6.4 资源异步加载117

6.4.1 import()118

6.4.2 异步chunk的配置120

6.5 本章小结121

第7章 生产环境配置122

7.1 环境配置的封装122

7.2 开启production模式124

7.3 环境变量125

7.4 source map126

7.4.1 原理126

7.4.2 source map配置127

7.4.3 安全129

7.5 资源压缩130

7.5.1 压缩JavaScript130

7.5.2 压缩CSS132

7.6 缓存133

7.6.1 资源hash133

7.6.2 输出动态HTML134

7.6.3 使chunk id更稳定136

7.7 bundle体积监控和分析138

7.8 本章小结140

第8章 打包优化141

8.1 HappyPack141

8.1.1 工作原理142

8.1.2 单个loader的优化142

8.1.3 多个loader的优化144

8.2 缩小打包作用域145

8.2.1 exclude和include145

8.2.2 noParse146

8.2.3 IgnorePlugin146

8.2.4 Cache147

8.3 动态链接库与DllPlugin147

8.3.1 vendor配置148

8.3.2 vendor打包149

8.3.3 链接到业务代码150

8.3.4 潜在问题151

8.4 tree shaking152

8.4.1 ES6 Module153

8.4.2 使用Webpack进行依赖关系构建153

8.4.3 使用压缩工具去除死代码154

8.5 本章小结154

第9章 开发环境调优155

9.1 Webpack开发效率插件155

9.1.1 webpack-dashboard155

9.1.2 webpack-merge157

9.1.3 speed-measure-webpack-plugin160

9.1.4 size-plugin160

9.2 模块热替换162

9.2.1 开启HMR162

9.2.2 HMR原理164

9.2.3 HMR API示例166

9.3 本章小结168

第10章 更多JavaScript打包工具169

10.1 Rollup169

10.1.1 配置170

10.1.2 tree shaking171

10.1.3 可选的输出格式172

10.1.4 使用Rollup构建JavaScript库173

10.2 Parcel173

10.2.1 打包速度174

10.2.2 零配置176

10.3 打包工具的发展趋势178

10.3.1 性能与通用性178

10.3.2 配置极小化与工程标准化178

10.3.3 WebAssembly179

10.4 本章小结180


【前言】

◆前言◆

在写作本书之前的一段时间,我一直负责与前端项目构建相关的工作,也曾做过一系列Webpack在线课程,但是当接到写一本关于Webpack的书的提议时,我着实犹豫了很久。的担忧在于Webpack本身已经有详尽的文档,社区中也有无数关于它的博客文章,自己如何能找到一个新的角度,让读者有所受益。

于是我开始回想自己初学习Webpack时的经历—在了解它的过程中遇到哪些曲折,使用时碰到了哪些问题,有哪些点是我觉得如果当初我早就知道就好了的。通过回忆这些曾遇到过的磕磕绊绊,我逐渐找到了写作本书的出发点—用我的语言尽可能简单、直白地介绍Webpack,让从来没有接触过Webpack的开发者也可以比较容易上手;同时把我所趟过的一些坑写出来,让读到的人少走一些弯路。

有时能听到一种戏称—Webpack 配置工程师,从这里面大概能体会到Webpack的使用并不简单。而这本书的作用之一大概就是把里面比较晦涩的部分解释清楚,让大家了解Webpack是怎么工作的,它其实并不神秘。

【本书内容】

本书共10章。

第1章是一个导引,对Webpack有一定基础的读者可以选择略过。第2章从头梳理了模块的概念。

第3章至第7章介绍了Webpack的各项特性以及基本的使用场景。

第8章和第9章则是进一步的优化以及一些高级的使用方法 。

后第10章介绍了其他打包工具并对这些工具进行了各项特性的对比。

【代码示例】

书中有很多代码片段,为了在线运行方便,我在GitHub上整理了一个示例仓库,如果需要,可以到https://github.com/yuhaoju/webpack-config-handbook进行查看。


【书摘与插画】


返回顶部