webpack 热更新的实现原理

定义

webpack 的热更新⼜称热替换(Hot Module Replacement),缩写为HMR。 这个机制可以做到不⽤刷新浏览器⽽将新变更的模块替换掉旧的模块。

原理

webpack 的热更新在 server 及 client 端都做了处理,我们来了解一下这个过程:

(1)webpack 在 watch 模式下,文件系统中的某一个文件发生修改,webpack 监听到文件变化,根据配置文件对模块进行重新编译打包,并将打包后的代码通过简单的 JavaScript 对象保存在内存中。

(2)webpack-dev-server 与 webpack 之间的接口交互,主要是webpack-dev-middleware 调⽤ webpack暴露的 API 对代码变化进⾏监 控,并且告诉 webpack,将代码打包到内存中。

(3)webpack-dev-server 监控:当我们在配置⽂件中配置了devServer.watchContentBase 为 true 的时候,Server 会监听这些配置⽂件夹中静态⽂件的变化,变化后会通知浏览器端对应⽤进⾏ live reload。

注意,这⼉是浏览器刷新,和 HMR 是两个概念。

(4)主要是通过sockjs(webpack-dev-server 的依赖)在浏览器端和服务端之间建⽴⼀个 websocket ⻓连接,将 webpack 编译打包的各个阶段的状态信息告知浏览器端,同时也包括第三步中 Server 监听静态⽂件变化的信息。浏览器端根据这些 socket 消息进⾏不同的操作。当然服务端传递的最主要信息还是新模块的hash 值,后⾯的步骤根据这⼀hash 值来进⾏模块热替换。

相关推荐
凌览几秒前
2026年1月编程语言排行榜|C#拿下年度语言,Python稳居第一
前端·后端·程序员
user86158185781545 分钟前
Element UI 表格 show-overflow-tooltip 长文本导致闪烁的根本原因与解法
前端
不会写前端的小丁8 分钟前
前端首屏渲染性能优化小技巧
前端
晴虹9 分钟前
lecen:一个更好的开源可视化系统搭建项目--组件和功能按钮的权限控制--全低代码|所见即所得|利用可视化设计器构建你的应用系统-做一
前端·后端·低代码
爱分享的鱼鱼12 分钟前
Pinia 深度解析:现代Vue应用状态管理最佳实践
前端·后端
花归去13 分钟前
echarts 柱状图包含右侧进度
开发语言·前端·javascript
多看书少吃饭29 分钟前
Vite开发环境按需编译是怎么实现的
前端
ybb_ymm37 分钟前
@Async修饰不生效
java·前端·数据库
Sapphire~40 分钟前
Vue3-03 熟悉src文件夹及Vue文件格式
前端·javascript·vue.js
快乐星球3721 小时前
鸿蒙5、6用户h5页面使用schemeURL跳转小程序失败
前端