Webpack 5 引入的 Eternal Universe 并不是某个单独发布的插件,而是开发者社区对持久化缓存体系的一种形象称呼。它核心解决的是大型项目反复构建时的速度痛点,通过把编译过程中的模块信息、依赖关系与产物缓存到本地,让再次启动不再从零开始。

什么是 Eternal Universe 永恒宇宙
Eternal Universe 这个词最早出现在 Webpack 5 的测试版本讨论中,当时核心维护者用 universe 来比喻模块依赖所构成的完整世界,而 eternal 强调这套依赖世界可以被长期保存和复用。在中文社区,大家逐渐把它翻译成永恒宇宙,用来指代 Webpack 5 基于文件系统的持久化缓存能力。
在 Webpack 4 及之前,缓存主要存在于内存里,进程一关什么都没了,下次构建还是冷启动。Webpack 5 则允许把缓存写入硬盘,默认路径在 node_modules/.cache/webpack。这意味着哪怕重启电脑,只要文件没变,就能直接读取已有编译结果,这就是永恒宇宙概念落地的实际表现。
它和旧版缓存有什么不同
过去的内存缓存只能服务单次会话,且无法精细控制哪些内容该缓存。Webpack 5 的持久化缓存会把每个模块的源码、AST、依赖关系以及 loader 的执行结果分别记录,并带上内容哈希。只要源文件或配置没变,哈希一致就直接命中,不需要重新跑 loader 和解析。
另一个关键区别是稳定性。旧版某些 loader 自身状态混乱会导致缓存失效或错误,新版通过明确的缓存字段和版本标记减少了这类问题。同时,开发者可以决定缓存类型,比如只在开发环境开启硬盘缓存,生产环境关闭以避免不必要的写入开销。
| 对比项 | Webpack 4 及之前 | Webpack 5 永恒宇宙 |
|---|---|---|
| 缓存位置 | 内存 | 文件系统(可配置) |
| 进程重启后 | 缓存清空 | 缓存保留并复用 |
| 命中精度 | 较粗 | 基于内容哈希细粒度 |
如何开启和配置
在 Webpack 5 中开启这项能力非常简单,只需要在配置对象里加上 cache 字段。例如设置 cache: { type: 'filesystem' } 就能启用基于硬盘的持久化缓存。你还可以指定缓存目录、缓存名称,甚至给缓存加版本号,防止不同项目互相干扰。
需要注意的是,某些动态生成内容的 loader 可能不适合缓存,这时可以用 cache: false 在 loader 层面单独关闭。另外,如果团队多人协作,建议把缓存目录加入 gitignore,避免把本地缓存提交到仓库。合理配置之后,中型项目的二次启动时间往往能缩短一半以上。
常见误区与建议
有人以为开了永恒宇宙就再也不用管构建优化,这是不对的。缓存只解决重复编译问题,首次构建和依赖变更后的重建仍然取决于项目本身结构。如果入口文件庞大、依赖嵌套深,依然需要配合代码分割和按需加载。
还有人把缓存目录误删导致构建变慢,其实正常升级 Webpack 或清理无效缓存时,应该让它自动失效而非手动破坏结构。日常开发中,保持 cache 配置稳定,才能持续享受永恒宇宙带来的长效构建体验。
Webpack5Eternal_Universe模块打包修改时间:2026-08-10 12:00:31