一文大白话讲清楚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. 客户端执行更新逻辑
相关推荐
pppiii2 分钟前
前端并发请求控制:5 种实现方案完整梳理
前端
请你吃div3 分钟前
Node 后端项目 Docker 自动部署教程(GitHub + 宝塔 + Self-hosted Runner)
后端·docker·node.js
郑州光合科技余经理17 分钟前
本地生活平台搭建:统一订单表与多后台切换怎么拆
java·开发语言·前端·系统架构·uni-app·php·ai编程
iFlyCai1 小时前
深入理解Flutter:StatefulWidget生命周期全解析(四)
前端·javascript·flutter
xm_xm_xm_11 小时前
Vue 3 项目开发常用操作详细汇总
前端·vue.js
计算机魔术师1 小时前
我国日均词元调用量突破 500 万亿,中国大模型稳居全球第一梯队
前端
泠曦れいひ2 小时前
在当前项目中安装Vite
前端框架·npm·node.js
码视野2 小时前
基于 Spring Boot + Vue3 的【高校化学实验室安全准入考试与危化品配伍排查系统】设计与实现(含PRD/三端高保真源码/大屏)
前端·人工智能·spring boot·后端·安全·vue3
Joseph 乔2 小时前
【NVM】node 和 nvm 卸载(安装 node & nvm & npm & cnpm & yarn 及配置)
npm·node.js
玄魂2 小时前
VisActor 全新图可视化开源项目:VGraph
前端·数据可视化