返回介绍

八、模块热替换提高开发效率

发布于 2024-09-07 12:24:19 字数 1837 浏览 0 评论 0 收藏 0

HMR 全称是 Hot Module Replacement ,即模块热替换。在这个概念出来之前,我们使用过 Hot Reloading ,当代码变更时通知浏览器刷新页面,以避免频繁手动刷新浏览器页面。HMR 可以理解为增强版的 Hot Reloading ,但不用整个页面刷新,而是局部替换掉部分模块代码并且使其生效,可以看到代码变更后的效果。所以, HMR 既避免了频繁手动刷新页面,也减少了页面刷新时的等待,可以极大地提高前端页面开发效率…

8.1 配置使用 HMR

HMRwebpack 提供的非常有用的一个功能,跟我们之前提到的一样,安装好 webpack-dev-server , 添加一些简单的配置,即在 webpack 的配置文件中添加启用 HMR 需要的两个插件

const webpack = require('webpack')

module.exports = {
  // ...
  devServer: {
    hot: true // dev server 的配置要启动 hot,或者在命令行中带参数开启
  },
  plugins: [
    // ...
    new webpack.NamedModulesPlugin(), // 用于启动 HMR 时可以显示模块的相对路径
    new webpack.HotModuleReplacementPlugin(), // Hot Module Replacement 的插件
  ],
}...

8.2 module.hot 常见的 API

前面 HMR 实现部分已经讲解了实现 HMR 接口的重要性,下面来看看常见的 module.hot API 有哪些,以及如何使用

  • module.hot.accept 方法指定在应用特定代码模块更新时执行相应的 callback ,第一个参数可以是字符串或者数组,如
if (module.hot) {
  module.hot.accept(['./bar.js', './index.css'], () => {
    // ... 这样当 bar.js 或者 index.css 更新时都会执行该函数
  })
}...
  • module.hot.decline 对于指定的代码模块,拒绝进行模块代码的更新,进入更新失败状态,如 module.hot.decline('./bar.js') 。这个方法比较少用到
  • module.hot.dispose 用于添加一个处理函数,在当前模块代码被替换时运行该函数,例如
if (module.hot) {
  module.hot.dispose((data) => {
    // data 用于传递数据,如果有需要传递的数据可以挂在 data 对象上,然后在模块代码更新后可以通过 module.hot.data 来获取
  })
}...
  • module.hot.accept 通常用于指定当前依赖的某个模块更新时需要做的处理,如果是当前模块更新时需要处理的动作,使用 module.hot.dispose 会更加容易方便
  • module.hot.removeDisposeHandler 用于移除 dispose 方法添加的 callback

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文