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

webpack配置完热更新之后还是会刷新整个页面

可以在webpack文档中找到有关热更新的详细信息,意思就是,开启热更新之后,整个页面你改了哪里,就只更新哪里,其他没变的,或者保存在缓存里面的内容,都不会改变,感谢很神奇!很方便!直接写个demo测试一下。

index.html

<!DOCTYPE html>
<html lang="zn"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>document</title></head><body><div id="app"></div></body>
</html>

bootstrap.js

import "./index.js";

index.js

let oContainer = document.getElementById("app");let oDiv1 = document.createElement("div");
let oDiv2 = document.createElement("div");let count = 0;
let a = "1111";
oDiv1.innerHTML = count;oDiv1.onclick = () => {count++;oDiv1.innerHTML = count;
};
oDiv2.innerHTML = a;oContainer.innerHTML = ''
oContainer.appendChild(oDiv1);
oContainer.appendChild(oDiv2);

webpack.config.js

const HtmlWebpackPlugin = require("html-webpack-plugin");module.exports = {entry: "./bootstrap.js",mode: "development",devServer: {static: "./dist",hot: true,},plugins: [new HtmlWebpackPlugin({template: "./index.html",}),],
};

package.json

{"name": "webpackdevservertest","version": "0.1.0","private": true,"scripts": {"start": "webpack-dev-server"},"dependencies": {"html-webpack-plugin": "^5.5.3","webpack": "^5.89.0","webpack-cli": "^5.1.4","webpack-dev-server": "^4.15.1"}
}

注意这里的devServer配置了hot: true,webpack5已经自动帮我们引入了webpack.HotModuleReplacementPlugin,所以这里只设置hot: true就可以热更新了。

接下来我们来测试一下,执行npm start,初始的count是0,a是1,我们点击oDIv1让他自增到2,然后修改a的值为11。然后保存代码,查看页面。如果这个时候oDIv1的值是2,oDiv2的值是11,那么就说明热更新配置成功了。但是很遗憾,oDIv1的值被重置为了0,热更新没生效。

经过再次查看文档,发现,热更新其实是需要自己监听module.hot.accept的。也就是说webpack的热更新并不是开箱即用的,而是只是给我们提供了这样一个钩子。

例如改一下bootstrap.js的代码

import "./index.js";if (module.hot) {module.hot.accept("./index.js", () => {});
}

我监听了index.js的文件变化。然后再次更改,虽然值还是会被重置。但是页面没有刷新,页面是否刷新,大家可以看一下当前tab页每次更新完是否会转圈,如果没有转圈,就说明没有刷新页面,而至于各种状态如何保持之前状态,需要大家自己在module.hot.accept中自行编写对应逻辑。这也说明了无论是vue,还是react都有自己自带的热更新的loader或者plugins。

最后总结一下,webpack的热更新并不是开箱即用的,而是需要再webpack提供的module.hot.accept函数中,自行实现对应的热更新之后的逻辑。

相关文章:

  • 制作openeuler制作livecd
  • VScode 配置
  • 计算机视觉的应用19-基于pytorch框架搭建卷积神经网络CNN的卫星地图分类问题实战应用
  • Python 使用XlsxWriter操作Excel
  • TCP知识点
  • C语言--每日选择题--Day24
  • ElasticSearch02
  • 局域网的网络ip不稳定问题
  • 【差旅游记】新疆哈密回王府印象
  • 唯创知音WT2605C-A001音频蓝牙语音芯片:小巧体积,高品质音频播放的创新
  • Grafana采用Nginx反向代理
  • 5. 链表
  • 语义SLAM论文、代码和数据集汇总
  • 体育网站的技术 SEO:完整指南
  • 练习九-利用状态机实现比较复杂的接口设计
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • C++类的相互关联
  • Debian下无root权限使用Python访问Oracle
  • dva中组件的懒加载
  • Github访问慢解决办法
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JavaScript服务器推送技术之 WebSocket
  • JSONP原理
  • NSTimer学习笔记
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • rabbitmq延迟消息示例
  • react 代码优化(一) ——事件处理
  • React组件设计模式(一)
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Yii源码解读-服务定位器(Service Locator)
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 计算机在识别图像时“看到”了什么?
  • 聊聊sentinel的DegradeSlot
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 前端自动化解决方案
  • 我有几个粽子,和一个故事
  • 线上 python http server profile 实践
  • 一起参Ember.js讨论、问答社区。
  • 再次简单明了总结flex布局,一看就懂...
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (06)金属布线——为半导体注入生命的连接
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (八)Spring源码解析:Spring MVC
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • ******IT公司面试题汇总+优秀技术博客汇总
  • ... 是什么 ?... 有什么用处?
  • .NET多线程执行函数
  • .NET关于 跳过SSL中遇到的问题
  • .sh 的运行
  • /proc/vmstat 详解
  • @NoArgsConstructor和@AllArgsConstructor,@Builder