DEBUG.WIKI
V.PS:让项目靠近用户,亚太、欧洲、北美 KVM VPS
IPPeak:从目标地区访问网页,住宅代理、SEO 监测、广告验证
ZgoCloud:多地区部署,按需选节点;日本、美国、香港、德国

Vite 没有热更新

Vite 不热更新,项目祖先目录却叫 test-results。检查 Chokidar 默认忽略、ignored 追加规则与真实源码位置,不把轮询当成取消过滤。

开发服务器能启动,改源码却没有热更新,甚至 watcher 没有看到项目目录。如果工作区的某一层路径叫 test-results,先检查它是否命中了 Vite 的默认忽略规则,而不是马上提高文件监听上限。

这一具体表现出现在 Vite 8.2.2 的项目中。已核对的正式 8.3.4 Chokidar 配置仍包含 **/test-results/**;升级到这一版,也不能据此认定默认忽略已取消。这里针对该文件 watcher 路径,不能把 bundled-dev 的所有原生监听选项混成同一套行为。

被忽略的可能是项目祖先目录

Vite 默认跳过 .git、node_modules、test-results、缓存和相应构建输出目录。**/test-results/** 不只匹配项目自己的测试产物,也可能覆盖整个工作区:

work/test-results/my-app/src/main.ts

这只是路径示例。即使 src/main.ts 本身属于正常应用源码,它仍位于被忽略的祖先路径之下。客户端 WebSocket 已连接、操作系统允许监听,也不能让已经排除的目录重新进入监听。

核对实际 Vite root、它的各层祖先目录,以及 server.watch 是否另被设为 null。文件已进入模块图,不等于底层 watcher 一定建立了监听;同样,server.fs.allow 处理文件访问范围,并不负责取消 watcher 的忽略规则。

ignored 空数组不会替换默认列表

8.3.4 的 Chokidar 配置把用户传入的 ignored 条目追加到默认列表。设置 ignored: [] 只是没有新增项目,不会删除内置的 test-results 规则。

usePolling: true 改变监听方式,也不会自动取消这条路径过滤。若根因确实是默认忽略,改成轮询只增加开销,未必看到任何源文件变化。只有实际遇到 WSL2 跨系统编辑等监听条件时,才应按那个独立场景评估轮询。

不要为绕过过滤把 node_modules 或所有测试产物一起强制加入监听;这会扩大工作量,也没有解释应用源码为什么位于生成目录下面。

把源码工作区移出产物路径

确认祖先目录命中规则后,选择不属于这些默认产物目录的工作区位置,保留 Git 历史、源文件和项目配置,再从新位置启动原开发流程。移动前检查脚本中的绝对路径、工作区引用、编辑器和运行进程,避免新旧目录同时运行。

需要保留测试报告时,让报告继续写入它自己的 test-results 目录,而不是把整个源码仓库放在那个目录里。不要为了更名清空原目录;里面可能还有未提交文件或其他项目产物。

重新打开并编辑原来不响应的源文件,检查实际 watcher 事件、热更新或完整刷新,以及页面内容确实改变。服务器 ready 或 WebSocket 已连接,都不是本题的恢复标准。

如果路径已经不匹配默认忽略,继续查看监听是否被禁用、编辑器实际修改的位置、权限和文件事件。Linux 真的报 ENOSPC 时,可另按监听配额检查,不应把没有事件的所有项目都当成额度不足。