面试题答案
一键面试基本工作原理
Webpack 热更新模块(HMR)能够在应用程序运行过程中,无需刷新整个页面,将更新的模块替换掉旧模块。其核心是在模块发生变化时,Webpack 会重新编译发生变化的模块及其依赖,并通过特定机制将新模块发送到浏览器端,浏览器端则在不刷新页面的情况下用新模块替换旧模块。
主要组件
- Webpack Compiler:负责整个项目的编译工作,监听文件系统,当文件发生变化时,启动新一轮的编译。
- Webpack Dev Server:基于 Express 的服务器,用于在本地开发环境中提供静态资源服务。它与 Webpack Compiler 交互,接收编译后的文件,并通过 WebSocket 与浏览器端建立连接,以便推送 HMR 相关信息。
- HMR Runtime:运行在浏览器端,通过 WebSocket 与 Webpack Dev Server 保持连接,接收新模块的信息,并负责在浏览器端处理模块的热替换操作。
交互流程
- 文件变化监听:Webpack Compiler 监听项目文件系统,一旦有文件发生变化,触发新一轮编译。
- 编译新模块:Webpack Compiler 重新编译发生变化的模块及其依赖,生成新的模块代码。
- 发送更新信息:Webpack Dev Server 从 Webpack Compiler 获取新编译的模块信息,通过 WebSocket 向浏览器端的 HMR Runtime 发送更新通知,包括更新的模块列表等信息。
- 下载新模块:HMR Runtime 接收到更新通知后,向 Webpack Dev Server 请求新模块的代码。
- 热替换模块:HMR Runtime 收到新模块代码后,尝试在浏览器端用新模块替换旧模块。如果替换成功,应用程序界面会即时反映出代码更新带来的变化;若替换失败,可能会提示用户手动刷新页面。