Skip to content

Commit f611f99

Browse files
committed
Replace clean-webpack-plugin with the core output cleaning feature
1 parent 3056c2a commit f611f99

File tree

7 files changed

+55
-243
lines changed

7 files changed

+55
-243
lines changed

index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1491,7 +1491,7 @@ class Encore {
14911491
/**
14921492
* If enabled, the output directory is emptied between each build (to remove old files).
14931493
*
1494-
* A list of available options can be found at https://github.com./johnagan/clean-webpack-plugin
1494+
* A list of available options can be found at https://webpack.js.org/configuration/output/#outputclean
14951495
*
14961496
* For example:
14971497
*

lib/config-generator.js

+22-3
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ const deleteUnusedEntriesPluginUtil = require('./plugins/delete-unused-entries')
2828
const entryFilesManifestPlugin = require('./plugins/entry-files-manifest');
2929
const manifestPluginUtil = require('./plugins/manifest');
3030
const variableProviderPluginUtil = require('./plugins/variable-provider');
31-
const cleanPluginUtil = require('./plugins/clean');
3231
const definePluginUtil = require('./plugins/define');
3332
const terserPluginUtil = require('./plugins/terser');
3433
const optimizeCssAssetsUtil = require('./plugins/optimize-css-assets');
@@ -40,6 +39,7 @@ const PluginPriorities = require('./plugins/plugin-priorities');
4039
const applyOptionsCallback = require('./utils/apply-options-callback');
4140
const copyEntryTmpName = require('./utils/copyEntryTmpName');
4241
const getVueVersion = require('./utils/get-vue-version');
42+
const multimatch = require('multimatch');
4343
const tmp = require('tmp');
4444
const fs = require('fs');
4545
const path = require('path');
@@ -244,6 +244,7 @@ class ConfigGenerator {
244244
}
245245

246246
return {
247+
clean: this.buildCleanConfig(),
247248
path: this.webpackConfig.outputPath,
248249
filename: filename,
249250
// default "asset module" filename
@@ -256,6 +257,26 @@ class ConfigGenerator {
256257
};
257258
}
258259

260+
/**
261+
* @returns {import('webpack').CleanOptions|boolean}
262+
*/
263+
buildCleanConfig() {
264+
if (!this.webpackConfig.cleanupOutput) {
265+
return false;
266+
}
267+
268+
const cleanedPaths = [].concat(this.webpackConfig.cleanWebpackPluginPaths);
269+
// works around a bug where manifest.json is emitted when
270+
// using dev-server... but then CleanWebpackPlugin deletes it
271+
cleanedPaths.push('!manifest.json');
272+
273+
const cleanConfig = {
274+
keep: (path)=> multimatch(path, cleanedPaths).length === 0
275+
};
276+
277+
return applyOptionsCallback(this.webpackConfig.cleanWebpackPluginOptionsCallback, cleanConfig);
278+
}
279+
259280
buildRulesConfig() {
260281
const applyRuleConfigurationCallback = (name, defaultRules) => {
261282
return applyOptionsCallback(this.webpackConfig.loaderConfigurationCallbacks[name], defaultRules);
@@ -457,8 +478,6 @@ class ConfigGenerator {
457478

458479
variableProviderPluginUtil(plugins, this.webpackConfig);
459480

460-
cleanPluginUtil(plugins, this.webpackConfig);
461-
462481
definePluginUtil(plugins, this.webpackConfig);
463482

464483
notifierPluginUtil(plugins, this.webpackConfig);

lib/plugins/clean.js

-48
This file was deleted.

lib/plugins/plugin-priorities.js

-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ module.exports = {
1515
WebpackManifestPlugin: 120,
1616
LoaderOptionsPlugin: 110,
1717
ProvidePlugin: 90,
18-
CleanWebpackPlugin: 80,
1918
DefinePlugin: 70,
2019
WebpackNotifier: 60,
2120
VueLoaderPlugin: 50,

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@
3131
"assets-webpack-plugin": "7.0.*",
3232
"babel-loader": "^9.1.3",
3333
"chalk": "^4.0.0",
34-
"clean-webpack-plugin": "^4.0.0",
3534
"css-loader": "^6.7.0",
3635
"css-minimizer-webpack-plugin": "^5.0.0",
3736
"fastest-levenshtein": "^1.0.16",
3837
"mini-css-extract-plugin": "^2.6.0",
38+
"multimatch": "^5",
3939
"pretty-error": "^4.0.0",
4040
"resolve-url-loader": "^5.0.0",
4141
"semver": "^7.3.2",

test/plugins/clean.js

-80
This file was deleted.

0 commit comments

Comments
 (0)