webpack的热更新原理
0 条评论webpack的热更新又称热替换(Hot Module Replacement),缩写为HMR。 这个机制可以做到不用刷新浏览器而将新变更的模块替换掉旧的模块。
- 在
webpack
的watch模式下,webpack
监听文件系统中文件变化,根据配置文件对模块重新打包 webpack-dev-middleware
调用webpack
暴露的API
对代码变化进行监控,并且告诉webpack
,将代码打包到内存中。webpack-dev-server
监控文件变化,然后通过sockjs
在浏览器端和服务端之间建立一个websocket
长连接,将webpack
编译打包的各个阶段的状态信息,监控到的文件变化,以及最主要的新模块的hash值告知浏览器端(webpack/hot/dev-server)。webpack/hot/dev-server
的工作就是根据webpack-dev-server/client
传给它的信息以及dev-server
的配置决定是刷新浏览器呢还是进行模块热更新。HotModuleReplacement.runtime
通过webpack/hot/dev-server
传递过来的新模块的hash
值,它通过JsonpMainTemplate.runtime
向server
端发送ajax
请求,服务端返回一个json
,该json
包含了所有要更新的模块的hash
值,获取到更新列表后,该模块再次通过jsonp
请求,获取到最新的模块代码。HotModulePlugin
将会对新旧模块进行对比,决定是否更新模块,在决定更新模块后,检查模块之间的依赖关系,更新模块的同时更新模块间的依赖引用。- 当
HMR
失败后,回退到live reload
操作,也就是进行浏览器刷新来获取最新打包代码。
参考文章
- 本文链接:https://xuehuayu.cn/article/54161.html
- 版权声明:① 标为原创的文章为博主原创,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接。② 标为转载的文章来自网络,已标明出处,侵删。