2021/04/09 - webpack热更新流程
Opened this issue · 0 comments
lxinr commented
- 在
Webpack的配置中添加HotModuleReplacementPlugin插件 entry注入热更新代码,用于保证服务端与客户端之间能够通信
webpack-hot-middleware/client?path=http://127.0.0.1:9000/__webpack_hmr&noInfo=false&reload=true&quiet=false - 客户端首次打开后,服务端与客户端通过WebScoket建立通信(
webpack-hot-middleware使用的是window.EventSource) - 调用
webpack的api对文件系统进行watch,其本质就是node中fs模块的watch,当有文件修改时,webpack就会对文件进行重新编译打包,然后保存到内存中,用到的库是memory-fs devServer通知浏览器端文件发生了改变,并调用webpack api监听compile的done事件,当compile完成后将编译打包后的新模块hash值发送到浏览器端- 浏览器端接收到服务端消息做出响应,一般会先接收一个内容为
hash的响应来告知是哪个hash的模块,待接收到ok时执行reload操作 webpack接收到最新hash值验证并请求模块代码HotModuleReplacement.runtime对模块进行热更新,具体包括模块匹配,模块替换等操作- 最后调用
module.hot.accept()完成热更新
参考:
Advanced-Frontend/Daily-Interview-Question#118
