- HMR:Hot Module Replacement是指当我们对代码修改并保存后,webpack将会对代码进行重新打包,并将新的模块发送到浏览器端,浏览器用新的模块替换掉旧的模块,以实现在不刷新浏览器的前提下更新页面。
- 热更新的主要流程
- 文件经过
Webpack-complier编译好后传输给HMR Server,HMR Server知道哪个资源(模块)发生了改变,并通知HMR Runtime有哪些变化(也就是上面我们看到的两个请求),HMR Runtime就会更新我们的代码,这样我们的浏览就会更新且不需要刷新。
3.1. webpack-dev-middleware和webpack交互来监控代码,服务端和浏览器建立websocket长连接,传递新模块的hash给浏览器。
3.2 HMR.runtime收到新模块hash,Jsonp.runtime向服务端发送ajax请求,获取json更新列表(包含所有要更新模块的最新hash)再通过jsonp获取最新hash对应的模块代码。
3.3 HotModulePlugin进行模块对比,是否要进行模块替换及更新依赖引用。
3.4 HMR失败,通过浏览器刷新获取最新代码。