开发
web-frontend
build-tools
module-bundler
webpack
Hmr

HMR

watch 文件监听模式

webpack 内置了 watch 监听模式,当文件发生变化时,webpack 会自动重新构建打包。

watch 的原理:

  • 轮询判断文件的最后编辑时间是否发生变化
  • 某个文件发生变化,并不会立刻告诉监听者,而是先缓存起来,等 aggregateTimeout 时间后在通知监听者

devServer 开发服务器

webpack-dev-server 在本地起了个 web 服务器,通过 websocket 与浏览器建立持久化链接,当源代码发生变更时,会通过 socket 通知网页端,网页端接到通知后会自动触发页面刷新。类似的还有 vscode 的插件 Live Server。

HMR 热模块替换

HMR 是 Webpack 的一项功能,它允许开发人员在不刷新页面的情况下更新模块。这意味着,当你修改代码时,你可以立即看到更新后的效果,而无需重新编译和刷新页面。这对于开发人员来说非常方便,因为它可以节省大量时间,同时也可以提高开发效率。devServer 的刷新是整个页面刷新,而 HMR 是局部刷新。webpack 提供了 HMR API,解决页面刷新导致的状态丢失问题。

HMR 原理:

  • 在运行时,Webpack 将监听特定的文件更改事件。
  • 当文件更改时,Webpack 会编译新的模块,并将其发送给客户端。
  • 客户端将在运行时接收到新的模块,并替换旧的模块,从而实现更新。