当前位置: 首页 > news >正文

【八股系列】谈谈关于对webpack热更新的原理?

文章目录

  • 1. 热更新原理
  • 2. 热更新配置

1. 热更新原理

Webpack 的热模块替换(Hot Module Replacement,HMR)是一种在不完全刷新页面的情况下更新应用代码的技术,从而提高了开发效率。以下是 HMR 的核心原理:

步骤描述
1开发者使用 webpack-dev-server 启动本地开发服务器,提供静态文件服务并支持 WebSocket 实时通信。
2webpack-dev-server 构建应用时,在输出的 JavaScript 文件中注入 HMR 运行时代码,处理更新通知。
3Webpack 配置 watch 模式,监听源代码文件变化,发现变化后开始重新编译。
4编译完成,新模块版本生成并存储在内存,启用 HMR 时不刷新页面,准备更新包。
5通过 WebSocket 长连接,webpack-dev-server 通知客户端哪些模块有更新。
6HMR 运行时尝试应用更新,调用模块的 HMR 接口,替换旧模块实例(若支持)。
7模块可接受或拒绝更新,有副作用则拒绝并提示手动刷新。
8更新失败,Webpack 运行时回滚到之前状态,避免应用崩溃。
9对于不支持 HMR 或无法更新的模块,开发者可选择手动刷新页面。

2. 热更新配置

启用 webpack 的 模块热替换 特性:

webpack.config.js

module.exports = {//...devServer: {hot: true,},
};

通过命令行使用:

npx webpack serve --hot

如需禁用:

npx webpack serve --no-hot

启用模块热替换功能,在构建失败时不刷新页面作为回退,使用 hot: 'only'

webpack.config.js

module.exports = {//...devServer: {hot: 'only',},
};

通过命令行使用:

npx webpack serve --hot only

提示
webpack-dev-server v4 开始,HMR默认启用的。它会自动应用 webpack.HotModuleReplacementPlugin,这是启用 HMR 所必需的。因此当 hot 设置为 true 或者通过 CLI 设置 --hot,你不需要在你的 webpack.config.js 添加该插件。

相关文章:

  • Golang | Leetcode Golang题解之第114题二叉树展开为链表
  • 装机必备——360压缩安装教程
  • Kubernetes集群上的Etcd备份和恢复
  • 汇编原理()二进制 跳转指令
  • 蒲公英旁路组网:总部旁路,分部一级组网方案
  • 安卓六种页面加载优化方案对比总结
  • Linux安装PostgreSQL脚本
  • 装饰模式:鸡腿堡
  • 提高联盟营销收入的秘密武器
  • Nginx实战:https 配置SSL证书
  • 弱密码系统登录之后强制修改密码
  • Codeforces Round 916 (Div. 3) C. Quests (贪心 + 模拟)
  • 鸿蒙开发接口图形图像:【@ohos.display (屏幕属性)】
  • Qt子线程更新UI的一种新玩法
  • 【Numpy】深入解析numpy中的ravel方法
  • 网络传输文件的问题
  • 收藏网友的 源程序下载网
  • 【css3】浏览器内核及其兼容性
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 2017年终总结、随想
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • DOM的那些事
  • flutter的key在widget list的作用以及必要性
  • Fundebug计费标准解释:事件数是如何定义的?
  • JavaScript 基本功--面试宝典
  • JavaScript 基础知识 - 入门篇(一)
  • maya建模与骨骼动画快速实现人工鱼
  • React+TypeScript入门
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • SpringBoot几种定时任务的实现方式
  • sublime配置文件
  • 聊聊flink的BlobWriter
  • 前端存储 - localStorage
  • 前端面试总结(at, md)
  • 入手阿里云新服务器的部署NODE
  • 实战|智能家居行业移动应用性能分析
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 正则表达式
  • zabbix3.2监控linux磁盘IO
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • ‌[AI问答] Auto-sklearn‌ 与 scikit-learn 区别
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • $ git push -u origin master 推送到远程库出错
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (03)光刻——半导体电路的绘制
  • (1)(1.9) MSP (version 4.2)
  • (4)(4.6) Triducer
  • (CPU/GPU)粒子继承贴图颜色发射
  • (PySpark)RDD实验实战——求商品销量排行
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (二)测试工具
  • (全注解开发)学习Spring-MVC的第三天