其实 clean-webpack-plugin 很容易知道它的作用,就是来清除文件的。

一般这个插件是配合 webpack -p 这条命令来使用,就是说在为生产环境编译文件的时候,先把 build或dist (就是放生产环境用的文件) 目录里的文件先清除干净,再生成新的。

1. 为什么要用 clean-webpack-plugin

如果还不理解为什么要用它,就看看下面的例子就可以知道的。

webpack.config.js

  1. const path = require('path')
  2. ...
  3. module.exports = {
  4. entry: {
  5. "app.bundle": './src/app.js'
  6. },
  7. output: {
  8. path: path.resolve(__dirname, 'dist'),
  9. filename: '[name].[chunkhash].js'
  10. },
  11. ...
  12. };

在终端上运行:

  1. $ npm run prod

9. 用 clean-webpack-plugin 来清除文件 - 图1

看看 dist 目录:

  1. dist
  2. ├── app.bundle.e56abf8d6e5742c78c4b.js
  3. ├── index.html
  4. └── style.css

你再把 src/app.js 改改内容,然后再执行 npm run prod

9. 用 clean-webpack-plugin 来清除文件 - 图2

再多运行几次,生成的带 hash 的 app.bundle.js 文件就会很多。

  1. dist
  2. ├── app.bundle.0e380cea371d050137cd.js
  3. ├── app.bundle.259c34c1603489ef3572.js
  4. ├── app.bundle.e56abf8d6e5742c78c4b.js
  5. ├── index.html
  6. └── style.css

这些带 hash 的 app.bundle.js 只有最新的才有用,其他的都没用,我们要在 build 之前把它们全清空,这真是 clean-webpack-plugin 发挥的作用。

2. 使用 clean-webpack-plugin

首先来安装。

  1. $ npm i clean-webpack-plugin --save-dev

webpack.config.js

  1. const path = require('path')
  2. ...
  3. const CleanWebpackPlugin = require('clean-webpack-plugin');
  4. let pathsToClean = [
  5. 'dist',
  6. ]
  7. module.exports = {
  8. entry: {
  9. "app.bundle": './src/app.js'
  10. },
  11. output: {
  12. path: path.resolve(__dirname, 'dist'),
  13. filename: '[name].[chunkhash].js'
  14. },
  15. ...
  16. plugins: [
  17. new CleanWebpackPlugin(pathsToClean),
  18. ...
  19. new ExtractTextPlugin('style.css')
  20. ],
  21. ...
  22. };

现在运行 npm run prod 试试,只有下面的文件:

  1. dist
  2. ├── app.bundle.0e380cea371d050137cd.js
  3. ├── index.html
  4. └── style.css

先到这里。