Note
本文档针对webpack3以下, webpack4不适用
前言
今天同事反馈为什么我们的项目突然之间不能热更新了?于是我试了一下,咦,果然不能热更新了。然后试了好几个版本,发现原来热更新已经好久都不能使用了。现在是不能回滚到很老的版本的了(之前webpack做过一个很大的配置优化),那么只能在这个新版本下找到问题的根源所在。好在所有的代码都是可以调试的,这也是我喜欢js的一个最大的原因。于是我就撸起袖子开始找问题。
寻找问题根源
从控制台的打印来看:
有一句话引起我的注意:[HMR] Nothing hot updated.
。
webpack HRM竟然判断我没有热更新的内容,明明我改了其中的一个模块的。
于是我们开始追溯process-update.js文件,找到这个调用:
var result = module.hot.check(false, cb);
发现这里会去校验热更新,当然这个触发是因为__webpack_hmr
请求,这是一个SSE协议.
然后我们继续追踪下去,发现这个check会去执行一个请求:
//127.0.0.1:9093/dist/66262610103662a21e81.hot-update.json
然后我查看了这个请求也是ok的,并且把对应被修改的trunk以及hash值带回来了: