一文大白话讲清楚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. 客户端执行更新逻辑
相关推荐
GalenWu2 小时前
对象转换为 JSON 字符串(或反向解析)
前端·javascript·微信小程序·json
GUIQU.2 小时前
【Vue】微前端架构与Vue(qiankun、Micro-App)
前端·vue.js·架构
数据潜水员2 小时前
插槽、生命周期
前端·javascript·vue.js
2401_837088502 小时前
CSS vertical-align
前端·html
优雅永不过时·2 小时前
实现一个漂亮的Three.js 扫光地面 圆形贴图扫光
前端·javascript·智慧城市·three.js·贴图·shader
CodeCraft Studio3 小时前
报表控件stimulsoft教程:使用 JoinType 关系参数创建仪表盘
前端·ui
春天姐姐4 小时前
vue知识点总结 依赖注入 动态组件 异步加载
前端·javascript·vue.js
互联网搬砖老肖5 小时前
Web 架构之数据读写分离
前端·架构·web
钢铁男儿6 小时前
C# 方法(值参数和引用参数)
java·前端·c#
阿金要当大魔王~~6 小时前
面试问题(连载。。。。)
前端·javascript·vue.js