HardSourceWebpackPlugin 是 Webpack 中提升开发冷启动速度最有效的缓存方案之一,通过持久化模块解析、依赖图构建、AST 转换等中间结果到磁盘,二次启动直接复用,典型项目启动耗时从 90+ 秒降至 10–20 秒。

HardSourceWebpackPlugin 是 Webpack 中提升开发冷启动速度最有效的缓存方案之一,尤其适合中大型项目。它不是简单跳过编译,而是把模块解析、依赖图构建、AST 转换等中间结果持久化到磁盘,第二次启动时直接复用,避免重复计算。
安装与基础启用
只需两步就能接入:
- 安装插件:
npm install --save-dev hard-source-webpack-plugin - 在 webpack 配置的
plugins数组中加入实例:const HardSourceWebpackPlugin = require('hard-source-webpack-plugin');plugins: [new HardSourceWebpackPlugin()]
注意:该插件只对开发环境(webpack serve)效果显著,生产构建不建议启用;首次运行无加速,第二次起才生效——这是正常现象,缓存需要一次“预热”。
配置缓存路径与哈希策略
默认缓存写入 node_modules/.cache/hard-source/[confighash],但建议显式指定,避免因 node_modules 清理导致缓存丢失:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
cacheDirectory设为绝对路径,例如path.resolve(__dirname, '.cache/hard-source') -
configHash用于区分不同 webpack 配置(如 dev/prod)。推荐使用node-object-hash生成稳定哈希:configHash: require('node-object-hash')({ sort: false }).hash -
environmentHash控制何时刷新缓存。应包含 lock 文件(package-lock.json或yarn.lock),确保依赖变更后自动重建缓存
规避常见冲突点
某些 loader 或插件会干扰 HardSource 缓存命中,需针对性排除:
- mini-css-extract-plugin 的 loader 默认被忽略,若发现 CSS 不更新,可手动添加
test: /mini-css-extract-plugin[\/].*loader/ - 避免在
resolve.alias中动态拼接路径(如path.resolve(...)),会导致 configHash 波动,频繁清缓存 - 禁用
cache: { type: 'filesystem' }(Webpack 5 内置缓存)与 HardSource 同时启用,二者机制重叠且可能冲突
验证与调试缓存状态
启用 info: { mode: 'test', level: 'debug' } 可在控制台看到详细缓存读写日志:
- 命中缓存时会显示
HardSourceWebpackPlugin: Using cache - 未命中或重建时提示
Cache miss或Cache invalidated - 构建耗时对比:典型项目开发启动从 90+ 秒降至 10–20 秒,提升约 80%


















