diff --git a/packages/webpack-cli/lib/groups/resolveConfig.js b/packages/webpack-cli/lib/groups/resolveConfig.js index ed66ebcca1c..de33eba34e4 100644 --- a/packages/webpack-cli/lib/groups/resolveConfig.js +++ b/packages/webpack-cli/lib/groups/resolveConfig.js @@ -126,13 +126,13 @@ const resolveConfigFiles = async (args) => { const defaultConfig = configFiles.find((p) => p.path.includes(mode) || p.path.includes(modeAlias[mode])); if (defaultConfig) { - opts = await finalize(defaultConfig, args); + opts = await finalize(defaultConfig, args, true); return; } const foundConfig = configFiles.pop(); - opts = await finalize(foundConfig, args); + opts = await finalize(foundConfig, args, true); return; } @@ -140,7 +140,7 @@ const resolveConfigFiles = async (args) => { // Given config data, determines the type of config and // returns final config -const finalize = async (moduleObj, args) => { +const finalize = async (moduleObj, args, isDefaultConfig = false) => { const { env, configName } = args; const newOptionsObject = { outputOptions: {}, @@ -151,6 +151,10 @@ const finalize = async (moduleObj, args) => { return newOptionsObject; } + if (isDefaultConfig) { + newOptionsObject.outputOptions.defaultConfig = moduleObj.path; + } + const config = moduleObj.config; const isMultiCompilerMode = Array.isArray(config); diff --git a/packages/webpack-cli/lib/utils/flag-defaults.js b/packages/webpack-cli/lib/utils/flag-defaults.js index 10940d05d42..c2484fb53ea 100644 --- a/packages/webpack-cli/lib/utils/flag-defaults.js +++ b/packages/webpack-cli/lib/utils/flag-defaults.js @@ -1,23 +1,25 @@ -const cacheDefaults = (finalConfig, parsedArgs) => { +const cacheDefaults = (finalConfig, parsedArgs, outputOptions) => { // eslint-disable-next-line no-prototype-builtins const hasCache = finalConfig.hasOwnProperty('cache'); let cacheConfig = {}; - if (hasCache && parsedArgs.config) { + if (hasCache && (parsedArgs.config || (outputOptions && outputOptions.defaultConfig))) { if (finalConfig.cache && finalConfig.cache.type === 'filesystem') { cacheConfig.buildDependencies = { - config: parsedArgs.config, + config: parsedArgs.config || [outputOptions.defaultConfig], }; + } else { + cacheConfig = finalConfig.cache; } return { cache: cacheConfig }; } return cacheConfig; }; -const assignFlagDefaults = (compilerConfig, parsedArgs) => { +const assignFlagDefaults = (compilerConfig, parsedArgs, outputOptions) => { if (Array.isArray(compilerConfig)) { - return compilerConfig.map((config) => cacheDefaults(config, parsedArgs)); + return compilerConfig.map((config) => cacheDefaults(config, parsedArgs, outputOptions)); } - return cacheDefaults(compilerConfig, parsedArgs); + return cacheDefaults(compilerConfig, parsedArgs, outputOptions); }; module.exports = assignFlagDefaults; diff --git a/packages/webpack-cli/lib/webpack-cli.js b/packages/webpack-cli/lib/webpack-cli.js index 918af585ebf..9a2957003eb 100644 --- a/packages/webpack-cli/lib/webpack-cli.js +++ b/packages/webpack-cli/lib/webpack-cli.js @@ -45,7 +45,7 @@ class WebpackCLI { // Merge the core flag config with the compilerConfiguration coreCliHelper.processArguments(coreCliArgs, this.compilerConfiguration, coreConfig); // Assign some defaults to core flags - const configWithDefaults = assignFlagDefaults(this.compilerConfiguration, parsedArgs); + const configWithDefaults = assignFlagDefaults(this.compilerConfiguration, parsedArgs, this.outputConfiguration); this._mergeOptionsToConfiguration(configWithDefaults); } diff --git a/test/core-flags/cache-flags.test.js b/test/core-flags/cache-flags.test.js index f4164965e14..767c61d924e 100644 --- a/test/core-flags/cache-flags.test.js +++ b/test/core-flags/cache-flags.test.js @@ -136,6 +136,17 @@ describe('cache related flags from core', () => { expect(exitCode).toEqual(0); }); + it('should assign cache build dependencies with default config', () => { + // TODO: Fix on windows + if (isWindows) return; + const { stderr, stdout, exitCode } = run(__dirname, ['--cache-type', 'filesystem']); + expect(stderr).toBeFalsy(); + expect(stdout).toContain('buildDependencies'); + expect(stdout).toContain(`'${path.join(__dirname, './webpack.config.js')}'`); + expect(stdout).toContain("type: 'filesystem'"); + expect(exitCode).toEqual(0); + }); + it('should assign cache build dependencies with merged configs', () => { // TODO: Fix on windows if (isWindows) return;