认识webpack的热更新

前言

提起热更新,这个知识点又是面试常常会问起,但是与你日常开发写业务又无多少关系的一个知识点,它能够提升你的编码效率,注意是开发阶段,单位时间内,你原来只能创造1变成现在可以创造2,它并不会提升你的代码质量也不会提升你代码最终运行的效率,但是我们还是有必要去认识一下它。

热更新

首先认识热更新:

Hot Module Replacement (HMR) exchanges, adds, or removes modules while an application is running, without a full reload.

当你程序运行的时候修改modules,不需要完全刷新可以做到更新。这样做有什么好处,好处是可以保存你现在的状态,可以提升你的开发效率。可能有些小伙伴还是不是特别清楚,我们实际操作一下:
1. 我们先安装一下这两个依赖

html-webpack-plugin是为了生成页面的,webpack-dev-server是为了开启一个服务器,运行我们的应用,写一下配置文件:

这里有一个小插曲,如果你把模版的路径写成./而不是src目录开始的会报错模块找不到,遇到问题一定要学会翻阅文档,因为你用的很多依赖都是新版本的,往往配置都是不同的,很多网上的其他开发者贴的配置都已经是落后的n个版本,所以你一定要养成查阅文档的习惯。
2. 我们提前在public目录下的模版文件里写了一个表单元素:


3. 然后来到我们的入口文件index.js:

注意我红框标注的这块代码,如果你在入口文件不配置这段,热更新是不生效的!(为啥平时写vue项目不用加这句话,好奇的你阅读完此文应该去了解一些vue-loader干了啥)

然后入口文件我引入了依赖a,a.js很简单,就打印一句话:


4. 此时,我们通过命令跑起来项目:


5. 来到浏览器:


6. ok对吧,此时我们在表单里输入1234567,然后回到源码a.js将打印1改为打印7,ctrl s保存你会惊奇的发现(页面没有刷新,但是我成功打印了7,如果刷新了页面你刚才输入的1-7会消失):

这就是热更新,在不刷新页面的情况下去更改你的模块,如果你熟悉ajax,那么你就很容易理解,页面没有刷新,但是最新的状态更新到页面上了。

为什么我没有直接上来跟你讲原理,如果你连热更新是个啥都不清楚,你甚至不知道该如何去配置热更新,何谈原理?对吧,我看了很多篇热更新的文章,直接讲原理,作者吭哧吭哧连图带思路码了很多,但是一个留言都没有!很多人甚至都被拦在了门外,怎么去研究原理,我今天这篇分享的作用就是带你从门外走进来,希望下次面试官问你的时候,你可以清晰的告诉他webpack里热更新是个啥,为啥能提升我们的开发效率!

最后我们再拓展一下思路,根据结果我们可以倒退,如果我们在入口文件里没有加入红框这段

你会发现当你更改源码之后,webpack重新打包,他会自动刷新浏览器,你刚才输入的表单的东西也会随之消失,你可以亲自测试一下。 所以这段话干了啥事呢你清楚了吧,就是你更新了源码它阻止了浏览器刷新,那最新的代码是怎么应用到浏览器的呢?

首先看一下打包后的文件:

并没有更新对吧,还是之前的代码,但是我们来到网络:

发现了我们更改后的代码,那么这一过程是怎么完成的呢?是通过webpack-dev-server内置插件webpack-dev-middleware结合websocket以及HotModuleReplacementPlugin来完成的,webpack-dev-middleware是个在node运行时的中间件,简单说下它的好处,这个中间件是将源码编译到内存中而不是写入到文件中,它主要用于检测代码的变化。websocket与客户端通信,将更改后的代码递交给HotModuleReplacementPlugin插件来处理。

至此hrm是什么、怎么用、大致的实现过程应该形成了一定认知,由此你再去深入原理等其他方面是不是会更容易些呢。

尾声

我越来越焦虑的是在中文互联网下很难搜索到有用的信息,不仅仅是开发方面,我不知道是越来越少的人不愿意分享了还是这个时代的年轻人和我们那一代人不一样了,似乎人人都奔着搞钱去了,陆续一些开源的作者也对自己开发的一些插件停着维护了,包括不限于我早些年用过的某个富文本插件,反而某些娱乐化的一些人都开始发出反问了,为什么不想想自己的原因,是自己不够努力吗?可笑的是很多努力的人并没有给到正向的反馈,可能这就是越来越多的人慢慢的不屑于去分享了,希望年轻的一代人可以扛起这个时代,作为老一辈的人尽量为你们指明前进的路。

相关推荐
橙子家1 小时前
浏览器缓存之【身份与会话管理】:Cookies 和 Private state tokens
前端
最新资讯动态2 小时前
HDC 2026 | 对话鲸鸿动能:存量时代,品牌如何夺回营销“主动权”?
前端
最新资讯动态2 小时前
游戏出海,从产品走向体系
前端
最新资讯动态2 小时前
20人团队跑出百万DAU、大厂也来抢量:谁在鸿蒙生态跑出加速度
前端
最新资讯动态2 小时前
千万开发者背后,鸿蒙商业化的B面
前端
爱勇宝4 小时前
AI 时代:智商决定起点,情商决定走多远
前端·ai编程
kyriewen4 小时前
用了半年 Claude Code 后,我尝试关掉它写了一周代码——结果比想象中严重
前端·javascript·ai编程
IT_陈寒5 小时前
Vite的静态资源打包让我熬夜到三点,这坑千万别跳
前端·人工智能·后端
徐小夕6 小时前
万字拆解 JitWord:企业级实时协同文档底层架构 + 大模型 AI 融合完整实践
前端·vue.js·github
一份执念6 小时前
uni-app 小程序分包限制处理与主包体积优化实战
前端·微信小程序