美文网首页
webpack 热更新

webpack 热更新

作者: jluemmmm | 来源:发表于2020-12-15 14:57 被阅读0次

模块热替换 HMR

基本概念

模块热更新 hot module replacement: 在应用程序运行过程中替换、添加 或 删除模块, 无需重新加载整个页面。

在应用程序中

(设置 HMR, 使进程自动触发更新, 或者可以选择在用户交互时进行更新)

  • 应用程序代码要求 HMR runtime 检查更新
  • HMR 异步下载更新, 通知 应用程序代码
  • 应用程序代码要求 HMR runtime 应用更新
  • HMR runtime 同步应用更新

在编译器中

compiler emit update, 允许从之前版本更新到新版本, update 由两部分组成

  • 更新后的 manifest (JSON)
  • 一个或多个更新后的 chunk (Javascript)

manifest 包括新的compilation hash 和 所有更新的 chunk list, 每个 chunk 包含了所有更新的模块, 或者是一个模块移除的标志。

compiler 确保 modules IDs 和 chunk IDs 在构建时保持一致, 这些 ID 通常保存在内存中, e.g.webpack-dev-server,也有可能存储在 JSON file 中

在 HMR Runtime 中

对于模块系统的 runtime, 附加的代码被发送到 parents 和 children 跟踪模块。在管理方面,runtime 支持两个方法, check 和 apply

  • check 发送 HTTP 请求来更新 manifest, 如果请求失败, 表示没有可用更新。如果请求成功, 待更新chunk 和当前加载过的 chunk 进行比较。 对每个加载过的 chunk,会下载相对应的待更新 chunk。当所有待更新 chunk 完成下载, 会准备切换到 ready 状态
  • apply 方法将所有被更新模块标记为无效。对于每个无效模块, 都需要在模块中有一个更新处理函数 update handler, 或者在它的父级模块中有个更新处理函数。否则, 无效标记冒泡, 并也使父级无效。每个冒泡继续, 直到到达应用程序入口起点,或者到达带有更新函数的模块, 以最先到达为准, 冒泡停止。如果他从入口起点开始冒泡, 此过程失败。
  • 之后所有无效模块都被 dispose 处理函数处理和解除加载。然后更新当前 hash,并且调用所有 accept 处理函数,runtime 切换回 idle state。

模块热更新指南
https://www.webpackjs.com/guides/hot-module-replacement/

API

如果已经通过 HotModuleReplacementPlugin启用了模块热更新,则它的接口将会暴露在module.hot属性下面。通常用户先检查这个接口是否可访问,然后再使用。

api 用法
accept 接收给定依赖模块的更新,并触发一个回调函数来对这些更新做出响应
decline 拒绝给定依赖模块的更新
dispose 添加一个处理函数,当前模块代码被替换时执行
removeDisposeHandler 删除由 dispose 或 addDisposeHandler 添加的回调函数
status 取得模块热替换进程的当前状态
check 测试所有加载的模块以进行更新,如果有更新,则应用他们
apply 继续更新进程
addStatusHandler 注册一个函数监听status的变化
removeStatusHandler 移除一个注册的状态处理函数

相关文章

  • webpack和vite对比

    热更新时webpack做了什么 总的来说,webpack的热更新就是,当我们对代码做修改并保存后,webpack会...

  • webpack热更新

    我们在用webpack打包文件,如果打包出来的资源是带有哈希值,每打一次包,就会出现一个不同哈希值的文件。为了避免...

  • webpack 热更新

    热更新,是指 Hot Module Replacement,缩写为 HMR。 如果模块发生变化,即便这个模块已经在...

  • webpack热更新

    使用webpack可帮助我们的开发以及打包,在开发过程中,有时候我们只修改了部分代码并想不必刷新整个页面即可看到更...

  • webpack 热更新

    代码地址请戳这里 HMR 是什么? Hot Module Replacement 即模块热替换,是指当你的代码修改...

  • webpack 热更新

    模块热替换 HMR 基本概念 模块热更新 hot module replacement: 在应用程序运行过程中替换...

  • webpack 热更新

    本节我们学习 webpack 的模块热更新,也可以叫做模块热替换。其目的是为了加快用户的开发速度,提高编程体验,方...

  • webpack 热更新

    本节我们学习 webpack 的模块热更新,也可以叫做模块热替换。其目的是为了加快用户的开发速度,提高编程体验,方...

  • 热重载、热更新

    热更新/ 热模块替换 hot module replacement 热更新:浏览器的无刷新更新(即webpack里...

  • webpack-dev-server 改造 ——本地接口接入教程

    大家都在用webpack,都在用webpack-dev-server的热更新,也都知道webpack自带serve...

网友评论

      本文标题:webpack 热更新

      本文链接:https://www.haomeiwen.com/subject/jsdwgktx.html