热更新是基于webpack-dev-server(WDS)的。
    当我们配置了WDS后,webpack会为每一个模块绑定一个module.hot对象,这个对象包含了HMR的API。
    调用HMR API有两种方式,一种是手动,另外一种是借助工具,如react-hot-loader、vue-loader等;
    在本地开发环境下,浏览器是客户端,WDS相当于我们的服务器。
    HMR的核心就是客户端从服务端拉取更新后的资源(准确的说是 chunck diff,即chunk需要更新的部分)
    第一步:确定浏览器什么时候去拉取这些更新?
    这需要WDS对本地源文件进行监听,实际上WDS与浏览器之间维护了一个websocket,当本地资源发生变化时,WDS会推送更新事件,并带上这次构建的hash,让客户端与上一次资源进行对比。
    第二步:要知道拉取什么?
    当客户端知道要更新后,就会向WDS发起一个请求来获取更改文件的列表,即改动了哪些模块。通常请求的名字为[hash].hot-update.json
    第三步:客户端获取到增量更新后该怎么处理?
    这些就属于HMR API的工作了。