Vite 热模块分析插件
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,将 @user_3c6cb52e/vite-plugin-hmr-analyzer 安装到 AI 助手中。
技能介绍
你要排查的问题
Vite 的 HMR 在项目变大之后经常“看起来热更新了,但没完全热更新”:按下保存,页面确实刷新了一部分模块,但几秒后白屏、状态丢失,或者某个深层依赖被重新求值,控制台里只剩一串 update 调用。
真正难回答的不只是“为什么失效”,而是“这次 update 链路经过了哪些模块,哪一段耗时最多”。原生 dev server 在 ws 事件里只告诉你模块失效了,不给链路顺序和相对耗时;手动打断点、看 Network 面板只能拿到零碎片段,很难还原完整的依赖图。
技能如何工作
它从两个入口采集数据:
- 插件 API:在
vite.config.ts中注册插件,钩住handleHotUpdate、transform等生命周期,拿到每次 HMR 涉及的模块列表和父子依赖关系。 - WebSocket 事件:监听 dev server 的
ws推送,记录update、error等事件的时序,给链路中的每个模块打上接收顺序和相对耗时。
采集完成后按模块边界聚合:
- 找出更新链里耗时占比最高的模块边界,也就是真正拖慢 HMR 的那一环。
- 检测循环依赖的热路径——A 依赖 B、B 又依赖 A 时,每次保存都可能触发多余重求值。
- 整理成 Chrome DevTools Performance 面板可导入的火焰图格式,贴进 performance trace 逐帧展开。
适用边界
- 只覆盖 Vite dev server 场景,不适用于生产构建,也不覆盖 webpack、Turbopack 等其它 bundler。
- HMR 分析依赖 dev server 实际推送的
ws事件;如果项目自定义了 runtime 或绕开了 Vite 的模块图,链路会不完整。 - 火焰图输出是诊断材料,不是自动优化工具:它能指出慢在哪,但不会自动拆模块或改写依赖。
使用场景
- 页面状态丢失、白屏或刷新异常时,还原 Vite HMR 的模块失效链路
- 想在 DevTools 火焰图中定位每次热更新里耗时最高的模块边界
- 排查依赖图里的循环依赖热路径,确认多余重求值的来源
- 分析自定义 dev server 的 WebSocket 事件时序,核对 update 推送过程
适合人员
- 维护中大型 Vite 应用,需要快速定位热更新失败原因的前端工程师
- 负责构建链路性能,想把 HMR 耗时变成可量化数据的工程效能成员
- 想在 DevTools 性能面板里复现并分析模块链路的调试爱好者