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!

相关推荐
CappuccinoRose11 分钟前
模块化体系
前端·import·export·es modules
AIDANHANG19 分钟前
放开靠时间戳对日志前先核请求ID跨服务传播与采样关联
前端·人工智能
两万五千个小时31 分钟前
DeepSeek Harness 从 0 开始:15 schedule 域(定时任务)
人工智能·程序员·架构
tachibana22 小时前
性能指标的口径选择
数据库·人工智能·架构·大模型·llm
半生过往2 小时前
前端学 Java 课程笔记
java·前端·笔记
肠畔码农2 小时前
深度解密 Redis 分布式锁:从单机原子语义到集群架构博弈
redis·分布式·架构
广州华水科技3 小时前
2026年单北斗GNSS变形监测系统推荐,破解水库安全监测难题
前端
jeffsonfu3 小时前
从LeNet到EfficientNet:经典CNN架构二十年演进史
人工智能·架构·cnn
独爱香菜3 小时前
Next.js 15 + Cloudflare Workers 实战:零中间件多语言 SEO 站点架构
前端
计算机魔术师3 小时前
DeepSeek、Qwen3比肩GPT-5,本地跑大模型的时代来了
前端