DEBUG.WIKI
OnlineSIM:在线接收短信,虚拟号码租用
Evoxt;最高 6.0GHz CPU;高频云服务器 · 免费每周备份;查看配置 →
阿里云;从建站到云上业务;云服务器 · 数据库 · 对象存储;查看产品 →

Vite watch 新增子目录后不再重建:检查原子替换

watch 启动后才引入子目录模块,原地写入有效,原子保存后再次修改却不重建。核对实际 Rolldown 监听版本与连续编辑结果。

vite build --watch 开始时正常,运行期间才新增并导入一个子目录模块。原地编辑能重建,编辑器一次原子保存后,再修改同一文件却没有动静,输出里仍是旧内容。若使用 Vite 8.2.1,应把“启动后才加入的目录”和“替换后继续编辑”一起保留。

单纯在已有子目录里做原子保存,未必触发;文件完全没有从入口导入时,也可能本来就不在构建图中。这两种对照都不能代替上述时间顺序。

监听的文件名还在,原来的监听对象可能已消失

编辑器可能先写临时文件,再通过 rename 替换目标。新引入子目录的监听登记若退化为单文件监听,替换会让监听仍附着在旧文件身份上,后续同名文件的写入就不再到达原句柄。

先检查入口确实通过 import 到达该模块,并比较原地写入、第一次替换及替换后的下一次写入。还需要观察 rename 之后的下一次保存:那次重建可能成功,下一次才静默失效。

Vite 8 的构建 watch 使用 Rolldown 底层监听,不应直接拿开发服务器的全部 chokidar 选项套过来。也不要先把整个根目录或 node_modules 纳入轮询,扩大监听范围会增加负担,却未必修正已经丢失的句柄。

更新实际使用的监听依赖,再保留连续保存检查

相关底层修正在 rolldown-notify 10.5.1、Rolldown 1.2.6 的发行组合中可核对。当前正式 Vite 8.3.5 声明 Rolldown ~1.2.14,采用更新的正式组合时,仍要核对锁文件与实际安装版本,避免工作区或覆盖规则继续保留旧副本。

暂时不能更新时,在增加目录和依赖后重新启动 watch,可以重新建立这批输入的监听;这只是有限的过渡办法,不能保证后续每次原子替换都安全。若项目必须调整编辑器保存方式,应局限在该项目并保留原设置,不能把关闭原子保存当成底层修复。

构建未恢复前,不要把最后一次成功产物继续当成最新代码部署。确认输出中与该模块对应的可观察值已变化,再继续原发布流程;日志没有错误,并不表示产物没有过期。

验收从运行中的 watch 新增子目录开始,先把模块接入入口,再原地写入、原子替换,最后再连续修改两次。每一步既看重建事件,也看输出实际内容,并覆盖生产的一次性构建。网络挂载或 WSL 跨系统编辑还有其他事件边界,版本更新后若仍失败,应按实际文件系统继续定位。