模块热替换
简介
模块热替换指的是每当本地的源文件有所修改的时候,webpack 会把修改部分重新构建并替换掉已构建出的文件,同时把变更增量推送到浏览器,通知页面渲染引擎对变更部分重新渲染。
nowa server
会默认开启模块热替换的功能。该功能是通过 Serve-Sent Events 技术实现单向消息推送,所以在很多非现代浏览器中不能被很好地支持(IE、Android)。
不能实时生效的场景
目前模块热替换的渲染层强依赖于 react,所以只有对 react component 的变更才能实时生效,如果修改的代码不在 react 生命周期中,则修改不能实时生效。
另外,如果当 Serve-Sent Events 推送通道没能成功建立起来,也会发生推送不生效。常见的失败原因如下:
- SSE 请求没有发送到开发服务器(默认会发送到当前正在访问的页面的域名)
- 经过了一层代理服务,代理服务一般不能处理 SSE 请求
- 浏览器不支持 SSE 请求
如何禁用
模块的热替换推送功能可以通过增加 —lazyload
参数来禁用。禁用之后源代码的修改仍会触发模块构建,但需要用户手动刷新页面变更才会同步到页面。禁用后也可在一定程度上提升构建性能。