vite项目hmr热更新问题

项目背景

最近发现公司项目又个奇怪的现象,就是在开发阶段出现页面更新,浏览器端没有更新的现象,页面没有任何错误,很奇怪!于是就开始我的排查之路!

简单分析

首先,我考虑了几种可能的原因:

  1. 可能配置问题
  2. 可能工程问题
  3. 依赖问题

于是,我从配置入手。根据官方文档,Vite 默认开启了 HMR(热模块替换)。为了更保险,我在服务器配置中显式设置了 hmr: true,但是问题依旧没有解决。更奇怪的是,问题发生时,我看到浏览器打印了 HMR 更新的日志,显示更新了 src/App.vue,但页面内容却没有随之更新。

视频复现原文

通过分析视频和控制台日志,确认了 HMR 更新的通知和浏览器端的打印信息都收到了,但页面并没有重新渲染,显示内容没有变化。这个现象让我更加困惑,似乎是 HMR 正常工作,但页面更新机制出现了问题。

vite 创建最小demo

为了进一步排除问题,我创建了一个最小的 Vite 项目,并在其中重现了这个问题。在最小项目中,我只引入了vue的全家桶的一个demo,不包含npm私有库的包使用 HMR 进行更新。进一步判断是不是私有库的问题还是全家桶问题!

视频复现原文

测试结果: 毫无疑问,我猜到结果啦! 没有什么问题!那就是私有库开发的有问题或者有啥不规范的!那么就下来,就开始精简项目中的最下demo 啦!

项目最小demo

只保留初始化配置。 正常 保留初始化配置, 初始化stroe 不正常

排查项目最小demo 的 stroe

发现去掉store 有个获取菜单的请求,直接把封装的http 请求 改成一个一个模拟的new Promise 的借口。发现正常, 发现是封装的http 有问题,因为http 是另外一个私服包,所以初步确定http 问题,但是http 写的太复杂,太乱啦!关键还是得处理,不知道重写还是修改代码!

排查HTTP 请求库

发现是 AxiosTransform 和 ** return new Promise((resolve, reject) => {** 没有错误上抛以及类型问题造成的在项目使用的使用中断和导出的不是纯净的 ES 模块,导致 Vite 的热更新链在该模块处中断,总之,HTTP 很多问题!所以我决定重写http!

相关推荐
毛骗导演2 分钟前
@tencent-weixin/openclaw-weixin 插件深度解析(二):消息处理系统架构
前端·架构
EllenLiu5 分钟前
架构演进与性能压榨:在金融 RAG 中引入条款森林 (FoC)
人工智能·架构
IT_陈寒19 分钟前
深入理解JavaScript:核心原理与最佳实践
前端·人工智能·后端
MrGud24 分钟前
Cesium中的坐标系及其转换
前端·cesium
小付学代码25 分钟前
香港地图可编辑版
前端
兆子龙37 分钟前
TypeScript高级类型编程:从入门到精通
前端·后端
SuperEugene39 分钟前
Vue3 模板语法规范实战:v-if/v-for 不混用 + 表达式精简,避坑指南|Vue 组件与模板规范篇
开发语言·前端·javascript·vue.js·前端框架
IT_陈寒1 小时前
Python开发者的效率革命:这5个技巧让你的代码提速50%!
前端·人工智能·后端
Luna-player1 小时前
Vue 3 + Vue Router 的路由配置,简单示例
前端·javascript·vue.js
用户69371750013841 小时前
不卷AI速度,我卷自己的从容——北京程序员手记
android·前端·人工智能