你以为 Vite 热更新靠 Node.js 插件跑?今天 Rolldown 用一个 hook 把这件事彻底变了

每次改完代码保存,浏览器秒级刷新——这个体验已经是 Vite 的招牌。但很少有人问:热更新到底是谁在跑?

Vite 的 HMR pipeline 是这样的:文件监控系统检测到变化,把变化交给 Vite 的 Node.js HmrRuntime;Node.js 根据文件变化计算受影响模块,逐一请求模块,再交给各个 plugin 做 transform 处理,最后把处理后的内容返回给浏览器。这套机制跑了好几年,中间的 plugin 管道是它能高度可扩展的根本原因。

但有个问题:plugin transform 是每个模块独立做的,没有全局模块图的概念。对于大型项目,Node.js plugin 层的 overhead 会累积,而且所有 HMR 逻辑都跑在 Node.js 主线程上。

Rolldown 的 hotUpdate hook 改变了这一点。

hotUpdate hook 是什么

Rolldown v1.2.7(2026-09-02)正式支持了 hotUpdate hook。这是 Rolldown 在内核层面原生处理 HMR 的机制:文件变化后,Rolldown 内置的原生文件系统监听器(Rust 实现)检测变化,内核直接重新分析模块图、生成 HMR 更新内容,不需要经过 Vite 的 Node.js plugin 容器。

整个链路变成:文件变化 → Rolldown Rust 内核 → 直接生成 HMR 更新 → Vite WebSocket → 浏览器。整个过程不经过 Vite 的 Node.js 插件管道。

Rolldown 1.0 发布博客里明确说了这个设计原则:Watch mode (experimental) was rebuilt on a new native file-system watcher that is reliable, allows for faster bundling, and includes WASM support。这个 native watcher 就是 hotUpdate hook 的基础设施。

架构意义:从 Node.js 职责到 Bundler 内核能力

hotUpdate hook 带来的最大改变是架构层面的:HMR 不再是「Node.js 插件层的职责」,而是「bundler 内核的直接能力」。

这意味着两件事:

延迟更低了。 以前文件变化要经过:文件监控 → Node.js → 各个 plugin → 返回内容。hotUpdate hook 之后:文件监控 → Rolldown Rust → 直接返回内容。少了一趟 Node.js 到 plugin 容器的进程内通信。对于模块多的项目,每减少一次 plugin 管道遍历,延迟就能省几毫秒。

模块图分析能力更强了。 Rolldown 在 Rust 里维护着完整的模块图。它知道哪个模块依赖哪个,知道你的 barrel export 实际导出了什么,知道 tree-shaking 会保留哪些代码。这些信息在 HMR 时可以直接用,不像以前 plugin 层只能拿到单个文件的 transform 结果。

Linear 的案例很多人知道:生产构建从 46 秒降到 6 秒,减少 87%。这背后是 Rolldown 的 Rust 内核做整库分析的能力,不是简单换个语言而已。

一个实际的限制

Vite 8 + Rolldown 的官方 benchmark 里有一个值得注意的数据:Vite 8’s main Node.js process currently uses around 7x more physical RAM than Vite 7 in dev mode because Rolldown keeps more module graph data in memory。

内存增加是真实的代价。对于有内存限制的 CI 环境,或者千级以上模块的 monorepo,这个开销要提前评估。不过生产构建的收益对多数团队来说仍然值得。

Vite 8 Full Bundle Mode:HMR 行为会变

Rolldown 1.0 博客里提到的 Full Bundle Mode 是另一个值得关注的演进:

Preliminary numbers are showing 3x faster dev startup, 40% faster full reloads, 10x fewer network requests.

这个模式下,dev 服务器不再按文件返回 ES 模块,而是返回完整 bundle。HMR 行为因此改变:不再是单个 ES 模块替换,而是整个 bundle 的增量更新。官方说这个模式适合「maximum alignment between dev and prod」的场景,不适合追求快速 HMR 反馈循环的团队。

怎么上手

如果你已经在用 Vite 8,默认已经用上了 Rolldown。Rolldown 的 hotUpdate hook 对 Vite 插件是透明的,不需要额外配置。

如果还在 Vite 7:rolldown-vite 包提供了渐进迁移路径——它让 Rolldown 处理构建,同时保持 Vite 7 的 API 不变,等 Vite 8 正式发布再升级。

Rolldown 的 watch mode 重建在 Rust native watcher 上,hotUpdate hook 让整个 HMR 生成直接在 Rust 里完成。内存是真实的代价,但对于中大型项目,HMR 链路减少一次 Node.js 插件容器跳转,收益往往超过成本。

评论区

0 条评论

登录后可评论。

铁锈·Rust工具链 15 阅读