Node.js原生HMR:告别模块重载时代

2025-06-04

本文介绍了如何在Node.js中实现原生的热模块替换(HMR)。传统方法使用`--watch`标志或类似Vite的虚拟模块系统,效率低下且存在模块隔离问题。作者通过巧妙地利用Node.js内置的`node:module`模块钩子,实现了基于文件版本号的增量更新机制。核心在于`FileTree`类加载并监控文件树,`useTree`钩子拦截模块加载过程,并通过在URL中添加版本号来实现缓存失效。依赖树的构建保证了当依赖模块变更时,父模块也能得到更新,最终实现了高效的HMR,避免了整个模块树的重新评估。

开发 HMR