玩转 webpack
程柳锋
腾讯高级工程师,IVWEB 团队社区和工程化负责人
27458 人已学习
新⼈⾸单¥68
课程目录
已完结/共 87 讲
加餐:webpack 5 专题内容 (3讲)
玩转 webpack
登录|注册
留言
71
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 19 | webpack中的热更新及原理分析
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的构建原理
本节摘要
登录 后留言

全部留言(71)

  • 最新
  • 精选
der果
老师HotModuleReplacementPlugin是做什么用的,没有手动引入也可以完成热更新。但是手动引入之后就会报错,ERROR in chunk main [entry] ./source2019/css/main_34800f5bbbfca82eb93c.css Cannot use [chunkhash] or [contenthash] for chunk in './source2019/js/[name]_[contenthash].js' (use [hash] instead) 用的是MiniCssExtractPlugin将css单独保存

作者回复: 这里面的热更新有最核心的是 HMR Server 和 HMR runtime。 HMR Server 是服务端,用来将变化的 js 模块通过 websocket 的消息通知给浏览器端。 HMR Runtime是浏览器端,用于接受 HMR Server 传递的模块数据,浏览器端可以看到 .hot-update.json 的文件过来。 继续回到这个问题:老师HotModuleReplacementPlugin是做什么用的? webpack 构建出来的 bundle.js 本身是不具备热更新的能力的,HotModuleReplacementPlugin 的作用就是将 HMR runtime 注入到 bundle.js,使得bundle.js可以和HMR server建立websocket的通信连接

2019-06-13
2
43
Mavericker
webpack.HotModuleReplacementPlugin 没有必要加,官网文档说配置了 hot: true 会自动引入这个 plugin。

作者回复: 嗯嗯,这里面也是出于演示 HMR Runtime

2019-06-01
25
驴肉蒸饺
还是没太理解webpack-dev-server和hot-module-replacement-plugin之间的关系。 请问老师,为什么二者不能合二为一呢,而要单独写两个包?然后用的时候又要组合来使用。目的是什么,请教老师,谢谢您。

作者回复: 需要从两者的功能上来分析说明: webpack-dev-server(WDS)的功能提供 bundle server的能力,就是生成的 bundle.js 文件可以通过 localhost://xxx 的方式去访问,另外 WDS 也提供 livereload(浏览器的自动刷新)。 hot-module-replacement-plugin 的作用是提供 HMR 的 runtime,并且将 runtime 注入到 bundle.js 代码里面去。一旦磁盘里面的文件修改,那么 HMR server 会将有修改的 js module 信息发送给 HMR runtime,然后 HMR runtime 去局部更新页面的代码。因此这种方式可以不用刷新浏览器。 单独写两个包也是出于功能的解耦来考虑的。简单来说就是:hot-module-replacement-plugin 包给 webpack-dev-server 提供了热更新的能力。

2019-05-31
13
从小就很酷
> webpack-dev-server --open 'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

作者回复: npm i webpack-dev-server -D,安装下这个包依赖

2019-06-05
2
9
小果果
'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 并没有启动成功

作者回复: 你需要在项目里面安装下这个依赖哈, npm i webpack-dev-server -D

2019-06-07
2
DJ
浏览器有刷新

作者回复: webpack-dev-server 默认是会在内容编译完成后自动刷新(liveload)浏览器的,此处增加了 HotModuleReplacementPlugin 插件之后可以做到 HMR的。如果HMR失败的化会降级使用 liveload 自动刷新浏览器模式。

2019-05-30
2
2
小伙儿爱裸睡
@范饭飯 官网对于devServer中hot的解读的确提到了开启此配置时会自动添加HotModuleReplacementPlugin插件,1楼并未误导他人,你可以将手动引入的plugin删除以检验是否正确。官网链接:https://webpack.js.org/configuration/dev-server/#root

作者回复: 嗯嗯,是的。这里引入 HotModuleReplacementPlugin 也是为了更好的说明热更新的 HMR runtime 的含义,就是通过这个插件给 bundle.js 注入 HMR runtime 的

2019-06-13
1
爱吃橙子的菜牙
编辑器的哪个主题呢,配色很好看

作者回复: 是 One Monokai

2019-06-01
1
Scorpio
dev那边一直失败。一下说没有webpack-cli 一下说没有commond。。。。

作者回复: 这种情况下可以考虑把 node_modules删掉重新运行下 npm install

2019-06-10
夏目有三三
有个问题,热更新应该是不写磁盘的,那为什么老师的demo里修改了src中的代码,页面里是dist中的 search.html 更新了呢?

作者回复: 不会更新的,热更新的情况下是放在内存里的。 这个章节也讲到了,热更新分两个阶段,启动阶段还是依赖磁盘文件去编译。更新阶段是直接内存增量更新的

2019-06-08
收起评论