0

0

JavaScript热模块替换机制

夜晨

夜晨

发布时间:2025-10-21 17:42:02

|

251人浏览过

|

来源于php中文网

原创

HMR通过构建工具监听文件变化并推送更新,实现模块热替换。1. 启动时建立WebSocket连接;2. 监听文件变更触发增量构建;3. 推送补丁包至浏览器;4. 客户端调用module.hot.accept处理更新;5. React用react-refresh、Vue由vue-loader支持、Vite通过import.meta.hot实现高效HMR。

javascript热模块替换机制

热模块替换(Hot Module Replacement,简称 HMR)是现代前端开发中提升效率的重要机制。它允许在应用运行时,只替换修改过的模块,无需刷新整个页面,从而保留当前的页面状态,比如表单输入、UI 位置等。JavaScript 的 HMR 主要依赖构建工具实现,如 Webpack、Vite 等。

工作原理

HMR 的核心在于监听文件变化,并通过一个“通信通道”将更新推送到浏览器。当某个模块被修改后,构建工具会重新编译该模块,并生成一个“补丁包”,浏览器接收到后,决定是否接受更新并执行替换逻辑。

关键流程包括:

  • 启动阶段:构建工具开启 WebSocket 服务,与客户端建立连接
  • 监听变更:文件系统监听器检测到文件修改,触发增量构建
  • 推送更新:构建完成后,通过 WebSocket 发送更新通知和新模块代码
  • 模块替换:客户端根据 HMR 接口判断能否接受更新,执行替换并触发回调

模块接口与 accept 机制

不是所有模块都能被热替换,开发者需要显式声明哪些模块支持 HMR。以 Webpack 为例,可通过 module.hot.accept API 注册处理函数。

立即学习Java免费学习笔记(深入)”;

例如:

Ke361开源淘宝客系统
Ke361开源淘宝客系统

Ke361是一个开源的淘宝客系统,基于最新的ThinkPHP3.2版本开发,提供更方便、更安全的WEB应用开发体验,采用了全新的架构设计和命名空间机制, 融合了模块化、驱动化和插件化的设计理念于一体,以帮助想做淘宝客而技术水平不高的朋友。突破了传统淘宝客程序对自动采集商品收费的模式,该程序的自动 采集模块对于所有人开放,代码不加密,方便大家修改。集成淘点金组件,自动转换淘宝链接为淘宝客推广链接。K

下载
module.hot.accept('./Button', function() {
  console.log('Button 模块已更新');
  // 可在此处重新渲染组件或更新实例
});

如果模块不接受更新,HMR 请求会向上冒泡,直到被处理或最终触发整页刷新。

框架中的实际应用

在 React 中,通常配合 react-refresh 或 @prefresh/webpack 实现组件热更新。这些插件会在编译时注入运行时代码,捕获组件定义并注册到 HMR 系统。

Vue 单文件组件则由 vue-loader 自动处理,style 和 template 修改可即时生效,script 部分也能保持状态。

Vite 利用原生 ES Modules 和浏览器 ESM 支持,通过 import.meta.hot 提供更轻量的 HMR 接口,更新速度更快,无需打包整个依赖图。

基本上就这些。HMR 虽然透明运行,但理解其机制有助于排查更新失败或状态丢失问题。关键是确保模块正确暴露 accept 回调,并合理管理副作用和状态生命周期。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1079

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

169

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1410

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

17

2026.01.19

console接口是干嘛的
console接口是干嘛的

console接口是一种用于在计算机命令行或浏览器开发工具中输出信息的工具,提供了一种简单的方式来记录和查看应用程序的输出结果和调试信息。本专题为大家提供console接口相关的各种文章、以及下载和课程。

415

2023.08.08

console.log是什么
console.log是什么

console.log 是 javascript 函数,用于在浏览器控制台中输出信息,便于调试和故障排除。想了解更多console.log的相关内容,可以阅读本专题下面的文章。

504

2024.05.29

function是什么
function是什么

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果。本专题为大家提供function是什么的相关的文章、下载、课程内容,供大家免费下载体验。

482

2023.08.04

js函数function用法
js函数function用法

js函数function用法有:1、声明函数;2、调用函数;3、函数参数;4、函数返回值;5、匿名函数;6、函数作为参数;7、函数作用域;8、递归函数。本专题提供js函数function用法的相关文章内容,大家可以免费阅读。

163

2023.10.07

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号