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!

相关推荐
万少21 分钟前
DeepSeek-V4-Flash 正式版上线了,但这 3 个坑我帮你提前踩了
前端·javascript·后端
明月_清风23 分钟前
🚀 Palantir Foundry 本体论实战:当 Ontology 从"知识图谱"进化为"企业操作系统"
前端·后端
驳是24 分钟前
入坑 Nginx,看这一篇就够了
前端
宁风NF40 分钟前
JavaScript:网络请求与前端通信
开发语言·前端·javascript·网络·学习·ecmascript
明月_清风40 分钟前
从概念到代码:用 Ontology 构建你的第一个知识图谱
前端·后端
程序员黑豆1 小时前
鸿蒙应用开发:AppStorage 全局状态存储用法教程
前端·harmonyos
猫猫不是喵喵.1 小时前
Vue3 中 computed 计算属性与 watch、watchEffect 监听
前端·javascript·vue.js
En^_^Joy1 小时前
Vue项目创建与入口配置全攻略
前端·vue.js·arcgis
爱码小白2 小时前
importlib模块
开发语言·前端·python
童谣12 小时前
越华环保:美丽蓝天项目申报方案数字化研判架构设计与实践
架构