MST

星途 面试题库

面试题:Webpack热更新模块中的HMR原理简述

请简要描述Webpack热更新模块(HMR)的基本工作原理,包括涉及到的主要组件和交互流程。
34.6万 热度难度
前端开发Webpack

知识考点

AI 面试

面试题答案

一键面试

基本工作原理

Webpack 热更新模块(HMR)能够在应用程序运行过程中,无需刷新整个页面,将更新的模块替换掉旧模块。其核心是在模块发生变化时,Webpack 会重新编译发生变化的模块及其依赖,并通过特定机制将新模块发送到浏览器端,浏览器端则在不刷新页面的情况下用新模块替换旧模块。

主要组件

  1. Webpack Compiler:负责整个项目的编译工作,监听文件系统,当文件发生变化时,启动新一轮的编译。
  2. Webpack Dev Server:基于 Express 的服务器,用于在本地开发环境中提供静态资源服务。它与 Webpack Compiler 交互,接收编译后的文件,并通过 WebSocket 与浏览器端建立连接,以便推送 HMR 相关信息。
  3. HMR Runtime:运行在浏览器端,通过 WebSocket 与 Webpack Dev Server 保持连接,接收新模块的信息,并负责在浏览器端处理模块的热替换操作。

交互流程

  1. 文件变化监听:Webpack Compiler 监听项目文件系统,一旦有文件发生变化,触发新一轮编译。
  2. 编译新模块:Webpack Compiler 重新编译发生变化的模块及其依赖,生成新的模块代码。
  3. 发送更新信息:Webpack Dev Server 从 Webpack Compiler 获取新编译的模块信息,通过 WebSocket 向浏览器端的 HMR Runtime 发送更新通知,包括更新的模块列表等信息。
  4. 下载新模块:HMR Runtime 接收到更新通知后,向 Webpack Dev Server 请求新模块的代码。
  5. 热替换模块:HMR Runtime 收到新模块代码后,尝试在浏览器端用新模块替换旧模块。如果替换成功,应用程序界面会即时反映出代码更新带来的变化;若替换失败,可能会提示用户手动刷新页面。