Skip to content

Commit bdd2512

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

File tree

8 files changed

+58
-249
lines changed

8 files changed

+58
-249
lines changed

index.js

Lines changed: 1 addition & 1 deletion
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

Lines changed: 22 additions & 3 deletions
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

Lines changed: 0 additions & 48 deletions
This file was deleted.

lib/plugins/plugin-priorities.js

Lines changed: 0 additions & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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/config-generator.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ const RuntimeConfig = require('../lib/config/RuntimeConfig');
1515
const configGenerator = require('../lib/config-generator');
1616
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
1717
const { WebpackManifestPlugin } = require('../lib/webpack-manifest-plugin');
18-
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
1918
const webpack = require('webpack');
2019
const path = require('path');
2120
const logger = require('../lib/logger');
@@ -534,7 +533,7 @@ describe('The config-generator function', () => {
534533
});
535534
});
536535

537-
describe('cleanupOutputBeforeBuild() adds CleanWebpackPlugin', () => {
536+
describe('cleanupOutputBeforeBuild() configures output cleaning', () => {
538537
it('without cleanupOutputBeforeBuild()', () => {
539538
const config = createConfig();
540539
config.outputPath = '/tmp/output/public-path';
@@ -543,8 +542,7 @@ describe('The config-generator function', () => {
543542

544543
const actualConfig = configGenerator(config);
545544

546-
const cleanPlugin = findPlugin(CleanWebpackPlugin, actualConfig.plugins);
547-
expect(cleanPlugin).to.be.undefined;
545+
expect(actualConfig.output.clean).to.be.false;
548546
});
549547

550548
it('with cleanupOutputBeforeBuild()', () => {
@@ -556,8 +554,7 @@ describe('The config-generator function', () => {
556554

557555
const actualConfig = configGenerator(config);
558556

559-
const cleanPlugin = findPlugin(CleanWebpackPlugin, actualConfig.plugins);
560-
expect(cleanPlugin).to.not.be.undefined;
557+
expect(actualConfig.output.clean).to.be.haveOwnProperty('keep');
561558
});
562559
});
563560

test/plugins/clean.js

Lines changed: 0 additions & 80 deletions
This file was deleted.

0 commit comments

Comments
 (0)