webpack热更新原理

146 阅读1分钟
  1. HMR:Hot Module Replacement是指当我们对代码修改并保存后,webpack将会对代码进行重新打包,并将新的模块发送到浏览器端,浏览器用新的模块替换掉旧的模块,以实现在不刷新浏览器的前提下更新页面。
  2. 热更新的主要流程 image.png
  3. 文件经过Webpack-complier编译好后传输给HMR Server,HMR Server知道哪个资源(模块)发生了改变,并通知HMR Runtime有哪些变化(也就是上面我们看到的两个请求),HMR Runtime就会更新我们的代码,这样我们的浏览就会更新且不需要刷新。

3.1. webpack-dev-middlewarewebpack交互来监控代码,服务端和浏览器建立websocket长连接,传递新模块的hash给浏览器。

3.2 HMR.runtime收到新模块hashJsonp.runtime向服务端发送ajax请求,获取json更新列表(包含所有要更新模块的最新hash)再通过jsonp获取最新hash对应的模块代码。

3.3 HotModulePlugin进行模块对比,是否要进行模块替换及更新依赖引用。

3.4 HMR失败,通过浏览器刷新获取最新代码。