最直接有效的方式是启用 Webpack 内置的 output.clean 选项,Webpack 5.20.0+ 原生支持,设 clean: true 即可自动清空 dist 目录;需确保 output.path 为绝对路径,clean 为布尔值即生效,清理时机精准且跨平台;如需保留特定文件,可配置 clean: { exclude: ['robots.txt', 'public/**'] },dry: true 可试运行,verbose: true 输出详细日志;旧项目若用 clean-webpack-plugin,应解构导入、前置插件位置,并建议迁移到 output.clean;手动 rm -rf 或 rimraf 存在易遗漏、跨平台差、难集成等风险。

Webpack 清理历史打包产物,最直接有效的方式是启用内置的 output.clean 选项,无需额外安装插件。这是 Webpack 5.20.0+ 版本起原生支持的功能,简洁、可靠、跨平台。
用 output.clean 自动清空 dist 目录
只需在 webpack 配置的 output 中设置 clean: true,每次构建前就会自动删除 output.path 下所有内容:
- 确保
output.path是绝对路径(例如path.resolve(__dirname, 'dist')) - clean 为布尔值即可生效,不需传对象或数组
- 它会在
emit钩子触发前执行,清理时机精准,不影响其他插件生成资源 - Windows/macOS/Linux 全平台一致,无 shell 命令依赖
需要排除某些文件时怎么配置
如果想保留 dist 下的特定文件(如 robots.txt、public/ 或部署用的 .nojekyll),可将 clean 设为对象:
clean: { exclude: ['robots.txt', 'public/**'] }-
dry: true可开启“试运行”模式,只打印将要删除的路径,不真正删除(适合验证) -
verbose: true会输出详细清理日志,便于排查遗漏
旧项目还在用 clean-webpack-plugin 怎么办
如果你的项目仍基于 Webpack 4 或早期 Webpack 5,且已集成 clean-webpack-plugin,注意以下几点:
立即学习“Java免费学习笔记(深入)”;
- v4+ 版本必须解构导入:
const { CleanWebpackPlugin } = require('clean-webpack-plugin') - 插件应放在
plugins数组靠前位置(不是最后),因为它需在其他插件写入文件前清空目录 - 推荐逐步迁移到
output.clean,更轻量、更符合官方演进方向
别忽略的细节
手动执行 rm -rf dist 或 rimraf dist 虽然可行,但存在风险:
- 不是 Webpack 构建流程的一部分,容易被遗忘或误跳过
- 脚本跨平台兼容性差(尤其 Windows)
- 无法与 watch 模式、CI/CD 流水线自然集成
- 不能感知 Webpack 的实际
output.path,硬编码路径易出错


















