一文大白话讲清楚webpack基本使用——6——热更新及其原理

文章目录

一文大白话讲清楚webpack基本使用------6------热更新及其原理

1. 建议按文章顺序从头看,一看到底,豁然开朗

2. 啥是热更新HMR

  • HMR,Hot Module Replacement,翻译为热重载。有人就问了,不是热更新么,怎么是热重载。你可这么理解,热重载是原理,它导致的效果就是热更新。你怎么更新,那不得重载。就这么简单
  • 热更新,简单点说,就是webpack提供的一项开发环境中的功能,在开发过程中,如果代码(理解为模块更准确,因为webpack万物皆模块)有改动,不需要刷新页面,可以实时更新修改的模块

3. 热更新怎么用

  • 用法很简单,只要我们在webpack.config.js中启用热模块替换就行
js 复制代码
devServer:{
    hot:true
}
  • 然后我们安装webpack serve
js 复制代码
npm install webpack-dev-server
  • 然后再package.json里面配置快速启动
js 复制代码
"dev": "webpack serve"
  • 然后启动server
js 复制代码
npm run dev

-可以看到顺利启动,我们复制http://localhost:8080/到浏览器运行,

  • 然后修改stylesheet/index.scss的p-border的border为15个像素,保存,返回到浏览器,别刷新,看到border已经是15px了,很好
  • 如果你是双屏幕开发,那就真的很带劲

4.热更新的原理

  • 既然我们改了代码,然后浏览器就同步了,说明什么

  • 说明他两肯定通信了,而且要一直保持通信,只要我这边改代码了,就要通知你

  • 那明了了,肯定是websocket通信没跑了

  • 我们修改了边框以后,浏览器建立一个ws

  • 但是通信的双方具体是谁呢,通信都发什么呢

  • 首先,我们运行npm run dev,发现只给了地址,但是dist下面没有打包出来东西,但是我们在浏览器访问地址的时候却能访问到东西,说明啥,首先webpack Dev Server得有能像build那样那js源代码打包成bundle.js的东西(webpack Compile)),而且还得有一个存储bundle.js的地方(Bundle Server)

  • 其次,我们在浏览器就运行了地址,也没创建websocket啊,怎么就能通信了,那只能说明你访问了这个地址后,webpack Dev Server给浏览器注入了一个websocket,注入到哪了呢,到bundle.js里面了,具体注入了个啥呢(HMR Runtime)

  • 再者,我们更新了代码以后,没有刷新,但是能局部更新,那说明webpack Devops Server肯定有一个将更新代码通过websocket发送给bundle.js的东西(HMR Server)

  • 最后,bundle.js既有我们的代码,又有注入进来的websocket,他是怎么工作的呢

  • 别着急,事情理清楚了,我们画一张图

  • 这就是webpack Dev Server 和Browser之间的关系图

  • 还不够明白是吧,别着急

  • 咱再上流程图

  • 这下看明白了吧

  • 再文字总结一下吧

  1. 通过webpack-dev-server创建两个服务器,提供静态资源的服务express和Socket服务
  2. express Server负责直接提供静态资源服务
  3. socket server建立长连接,保持双方通信
  4. 如果socket server监听到模块发生变化时,会生成manifest和update chunk
  5. 通过websocket发送给给客户端
  6. 客户端执行更新逻辑
相关推荐
AlienZHOU2 小时前
AI Coding 时代下,我的技术面试实践分享
前端·后端·面试
Captaincc5 小时前
AI用量v0.1.11更新发布 新增 jusage doctor 诊断指令 托盘展示token 和余额 新增 AutoClaw 支持
前端·后端·vibecoding
计算机魔术师6 小时前
德国Wiki被黑后两周,OpenAI终于把模型失控的账本摊开了
前端
kyriewen7 小时前
我让 AI 当面试官面了我一轮:第 3 个追问我就卡住了(附 10 道追问清单)
前端·面试·ai编程
IT_陈寒7 小时前
Python的GIL把我坑惨了,多线程跑得比单线程还慢
前端·人工智能·后端
65岁退休Coder7 小时前
PI Agent 开发一个生产级 Harness
后端·node.js·agent
前端snow7 小时前
ai agent --- 多agent框架之图编排引擎-langgraph
前端
竹林8187 小时前
OmniPic Studio v3.2.1 核心技术架构与全平台发版解析文档
前端·浏览器
JamesZhang800787 小时前
页面内存只涨不跌? 一次泄漏排查, 牵出 WeakMap 的诞生
前端
Z小明8 小时前
第 6 章 组件进阶
前端·vue.js