玩转 webpack
程柳锋
腾讯高级工程师,IVWEB 团队社区和工程化负责人
27458 人已学习
新⼈⾸单¥68
课程目录
已完结/共 87 讲
加餐:webpack 5 专题内容 (3讲)
玩转 webpack
登录|注册
留言
22
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 01 | 课程介绍
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | 为什么需要构建工具
04 | 前端构建演变之路
05 | 为什么选择webpack
06 | 初识webpack
07 | 环境搭建:安装webpack
08 | webpack初体验:一个最简单的例子
09 | 通过npm script运行webpack
10 | webpack核心概念之entry
11 | webpack核心概念之output
12 | webpack核心概念之loaders
13 | webpack核心概念之plugins
14 | webpack核心概念之mode
15 | 解析ECMASCript 6和React JSX
16 | 解析CSS、Less和Sass
17 | 解析图片和字体
18 | webpack中的文件监听
19 | webpack中的热更新及原理分析
20 | 文件指纹策略:chunkhash、contenthash和hash
21 | HTML 、CSS和JavaScript代码压缩
22 | 自动清理构建目录产物
23 | PostCSS插件autoprefixer自动补齐CSS3前缀
24 | 移动端CSS px自动转换成rem
25 | 静态资源内联
26 | 多页面应用打包通用方案
27 | 使用sourcemap
28 | 提取页面公共资源
29 | Tree Shaking的使用和原理分析
30 | Scope Hoisting使用和原理分析
31 | 代码分割和动态import
32 | 在webpack中使用ESLint
33 | webpack打包组件和基础库
34 | webpack实现SSR打包(上)
35 | webpack实现SSR打包(下)
36 | 优化构建时命令行的显示日志
37 | 构建异常和中断处理
38 | 构建配置包设计
39 | 功能模块设计和目录结构
40 | 使用ESLint规范构建脚本
41 | 冒烟测试介绍和实际运用
42 | 单元测试和测试覆盖率
43 | 持续集成和Travis CI
44 | 发布构建包到npm社区
45 | Git Commit规范和changelog生成
46 | 语义化版本(Semantic Versioning)规范格式
47 | 初级分析:使用webpack内置的stats
48 | 速度分析:使用speed-measure-webpack-plugin
49 | 体积分析:使用webpack-bundle-analyzer
50 | 使用高版本的webpack和Node.js
51 | 多进程/多实例构建
52 | 多进程并行压缩代码
53 | 进一步分包:预编译资源模块
54 | 充分利用缓存提升二次构建速度
55 | 缩小构建目标
56 | 使用Tree Shaking擦除无用的JavaScript和CSS
57 | 使用webpack进行图片压缩
58 | 使用动态Polyfill服务
59 | webpack启动过程分析
60 | webpack-cli源码阅读
61 | Tapable插件架构与Hooks设计
62 | Tapable是如何和webpack进行关联起来的?
63 | webpack流程篇:准备阶段
64 | webpack流程篇:模块构建和chunk生成阶段
65 | webpack流程篇:文件生成
66 | 动手编写一个简易的webpack(上)
67 | 动手编写一个简易的webpack(下)
68 | loader的链式调用与执行顺序
69 | 使用loader-runner高效进行loader的调试
70 | 更复杂的loader的开发场
71 | 实战开发一个自动合成雪碧图的loader
72 | 插件基本结构介绍
73 | 更复杂的插件开发场景
74 | 实战开发一个压缩构建资源为zip包的插件
75 | 商城技术栈选型和整体架构
76 | 商城界面UI设计与模块拆分
77 | React全家桶环境搭建
78 | 数据库实体和表结构设计
79 | 登录注册模块开发
80 | 商品模块开发
81 | 订单模块开发
82 | 谈谈Web商城的性能优化策略
83 | 功能开发总结
84 | 玩转webpack结束语
加餐:webpack 5 新特性解析
加餐:bundle和bundless的差异
加餐:Vite的构建原理
本节摘要

我是谁?我在前端开发方面有哪些经验?

你好,我是程柳锋。

目前我在腾讯担任 IVWEB 团队的社区和工程化负责人,也是前端工作流和规范工具 Feflow 的作者,这个贡献也获得了“腾讯 2018 年度十佳内部开源项目” 的奖项。

在腾讯工作期间,我先后参与了 NOW 直播、NOW 交友、群送礼、群视频等直播类产品的前端开发工作。

目前负责约 40 人的 Web 前端团队的工程效率建设,我曾经主导团队将 Fis3 构建切换到 webpack4,这个过程中涉及到多页面打包、SSR、PWA、Prerender 等多种构建场景,和多实例构建、并行压缩、公共资源分包、Tree-Shaking、动态 Polyfill 等构建策略。这个经历使我对 webpack 构建的打包速度和体积优化有了非常丰富的实战经验,同时也让我对前端工作流和团队开发规范实施有了深刻的认识。

为什么要深入掌握 webpack ?

首先,这个和我们目前的应用场景和开发方式是息息相关的。最近十年,手机、移动平板和可穿戴设备的迅速普及。Web 前端的开发触角也从传统的 PC 网页的开发发展到多终端的开发,所以我们就需要同时兼顾 PC、H5 等各类不同分辨率的网页开发。因此,针对不同的应用场景做不同的打包就显得很重要了,比如针对 PC 端的中后台应用,我们需要支持单页应用的打包构建。而 H5 页面通常对性能和可访问性有着极高的要求,因此需要通过构建来支持服务端渲染和 PWA 离线缓存。

其次, Node.js 自 2009 年发布以来,至今已历时十年。这十年间,整个 Node.js 社区异常繁荣。迄今为止,已经有 80 多万的第三方组件,并且这个数字每天还在快速增加。而 NPM 的组件在浏览器端的 JS 代码中并不能直接引入,这个时候就需要借助 webpack 等构建工具来快速复用各种优秀成熟的组件,从而加速 Web 开发。

最后,当下前端社区里最为流行的三大框架 React、Angular.js 和 Vue,它们的一些语法,比如 JSX 和 Vue 指令,这些都是浏览器无法直接解析的,也需要经过构建工具进行转换,而 webpack 毫无疑问是前端构建领域里最耀眼的一颗星。无论你前端走那条线,你都要有很强的 webpack 知识。熟悉 webpack 的使用和原理可以让你拓宽前端技术栈,在发现页面打包的速度和资源体积的问题时能够知道如何排查问题和优化手段,同时,熟悉 webpack 的原理将会对其它跨端开发比如小程序、Weex、ReactNative、Electron 等框架的打包快速上手。

初学者在学习 webpack 的过程中会遇到哪些困难?

刚刚接触 webpack 的开发者可能对 webpack 的打包理念:一切皆为模块感到困惑,在 webpack 中,不仅仅 JS 是模块,其它的 HTML、CSS、图片和字体等都可以成为模块。

其次,webpack 的配置异常灵活,并且具备强大的插件化扩展能力。因为这个原因,很多开发者都曾经自嘲“就缺一个 webpack 配置工程师了”。上手 webpack 确实是需要了解 webpack 里面的众多新的概念:entry,output,mode,loaders 和 plugins、热更新、Code Spliting、Tree-Shaking 等,这个可能会让初学者感到 webpack 很复杂,望而生畏,也造成一定的学习成本。

另外,webpack 的进一步深入学习是有一定的学习曲线的。包括 webpack 打包的速度、体积、页面加载时的性能优化等,是需要具备比较全面的 webpack 专业知识,搞懂 webpack 内部的运行原理和插件机制才能深入掌握。

因此本课程设计的时候遵循由浅入深的原则,内容方面共分为 4 个阶段:基础篇、进阶篇、原理篇和实战篇。基础篇主要是帮你掌握 webpack 的核心概念和开发必备技巧,进阶篇将会让你以工程化的思维去编写一份健壮可维护的 webpack 构建配置,同时掌握 webpack 构建速度和体积的优化策略,原理篇将会通过 webpack 源码让你了解 webpack 内部的运行原理和编写自定义 Loader 和插件的能力,实战篇将会从一个 Web 商城项目出发,讲解 webpack 如何运用到实际的项目中去,并且最大化地提升开发阶段和发布阶段的构建体验。

本课程适用于前端开发者和跨端开发者的学习,能够帮助初学者和开发者克服 webpack 学习的障碍,轻松掌握 webpack 的核心技能。学完后,你将会对 webpack 的知识体系有一个全面和深入的了解,并在工作中能够高效的使用 webpack 去完成各类前端项目的打包构建工作。

我是程柳锋,我在极客时间等你。

登录 后留言

全部留言(22)

  • 最新
  • 精选
Acelynn
老师,我看你的课程表里面,没有讲proxy相关的点,不知道是不是我没看仔细。如果确实没有,到时候能不能讲点这方面的内容。对代理配置了解的很少,本地开发的脚本如果实时代理进行线上调试效果这方面不太会。

作者回复: 嗯嗯,虽然 webpack 也提供了 proxy 的支持,但是还是推荐使用更加专业的 Fiddler + willow 或者 Whistle。之前这方面也有做实践,但是 webpack 的 proxy 在接口需要校验 refer 的时候表现的不尽人意。 我们团队之前使用 Windows 开发的时候是用的Fiddler + willow,后面切换到 Mac 后 都是用 whistle(https://github.com/avwo/whistle) 了

2019-05-29
5
格瑞图
作为一个不懂前端的初级架构师,想学习一下这么课程,老师有啥建议?

作者回复: webpack 里面的概念和用法很多,支持的功能也很强大,可以挖深的点也很多。建议: 1. 掌握下 webpack 里面的基础用法,比如资源解析、代码压缩、文件指纹、热更新、source map 等等。 2. 学习的过程中多动手练习,实际的去编写 webpack 配置,由浅入深,编写的过程中多问几个为什么,最后的目的也是尽量可以做到手写一份 webpack 配置了 3. 除此之外,如果想更深入的学习,可以关注下第3、4、5、6章的知识

2019-05-27
4
felix
Angular-cli是不是不用webpack 了?

作者回复: angular-cli 的底层打包还是基于webpack的,只是cli上层对 webpack 配置进行了一层封装,之前的版本里面还提供了 ng eject 用来导出 angular 项目的 webpack 配置的。

2019-05-27
3
Acelynn
或者有没有这方面比较好的文章推荐一下?

作者回复: 这个资源不错:https://github.com/webpack-china/awesome-webpack-cn 学习课程的同时可以结合着看下

2019-05-29
1
欧罗巴皇
老师,我用webpack进行多页面构建的时候研发环境有个问题,JS需要计算容器高度的时候,会先计算出高度再渲染样式,导致计算出来的数据不正确,请问怎么解决啊?

作者回复: 计算出来的数据不正确,这个可以再具体描述下不?我帮你参考参考

2019-05-28
1
嗜爱年华
老师,这个课程的源码一直下载失败怎么回事,下载了几十次都是网络错误,https://github.com/geektime-geekbang/geektime-webpack-course,能解决下吗,急

作者回复: 是不是网络不太好呀,换个网络试试

2019-08-31
2
无极
老师讲得很好

作者回复: 感谢夸奖😄

2019-06-14
欧罗巴皇
这是我的源码 https://github.com/seafronthu/webpack4-multi-page 其中npm run dev开发环境下 console.log(document.querySelector('.ljb').offsetTop)打印出来的值不正确。 谢谢老师帮我看一下!

作者回复: 看了下,打印出来的是22。这个没啥问题吧

2019-05-29
Sky-fly
看着很多干货毫不犹豫买了
2019-05-28
17
欧罗巴皇
老师,我刚才用getComputedStyle打印了no-ul的margin就是没有渲染过的样式16px 0 然后Mac os 和Windows谷歌火狐都是一样计算的offsetTop有问题
2019-05-30
6
收起评论