From 14f5740ce3aa0efdc90b6666b3f3e6263c9a53eb Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Mon, 5 Oct 2020 19:42:36 +0530 Subject: [PATCH] fix: log error if --config-name is used without multiple configs --- .../webpack-cli/lib/groups/ConfigGroup.js | 22 ++++++++++++------- test/config-name/config-name.test.js | 6 +++++ test/config-name/single-config.js | 8 +++++++ 3 files changed, 28 insertions(+), 8 deletions(-) create mode 100644 test/config-name/single-config.js diff --git a/packages/webpack-cli/lib/groups/ConfigGroup.js b/packages/webpack-cli/lib/groups/ConfigGroup.js index 9d4bffd759a..233ceebc555 100644 --- a/packages/webpack-cli/lib/groups/ConfigGroup.js +++ b/packages/webpack-cli/lib/groups/ConfigGroup.js @@ -163,21 +163,27 @@ const finalize = async (moduleObj, args) => { const newOptions = configOptions(formattedEnv, args); // When config function returns a promise, resolve it, if not it's resolved by default newOptionsObject['options'] = await Promise.resolve(newOptions); - } else if (Array.isArray(configOptions) && configName) { - // In case of exporting multiple configurations, If you pass a name to --config-name flag, - // webpack will only build that specific configuration. - const namedOptions = configOptions.filter((opt) => configName.includes(opt.name)); - if (namedOptions.length === 0) { - logger.error(`Configuration with name "${configName}" was not found.`); - process.exit(2); + } else if (configName) { + if (Array.isArray(configOptions) && configOptions.length > 1) { + // In case of exporting multiple configurations, If you pass a name to --config-name flag, + // webpack will only build that specific configuration. + const namedOptions = configOptions.filter((opt) => configName.includes(opt.name)); + if (namedOptions.length === 0) { + logger.error(`Configuration with name "${configName}" was not found.`); + process.exit(2); + } else { + newOptionsObject['options'] = namedOptions; + } } else { - newOptionsObject['options'] = namedOptions; + logger.error('Multiple configurations not found. Please use "--config-name" with multiple configurations.'); + process.exit(2); } } else { if (Array.isArray(configOptions) && !configOptions.length) { newOptionsObject['options'] = {}; return newOptionsObject; } + newOptionsObject['options'] = configOptions; } diff --git a/test/config-name/config-name.test.js b/test/config-name/config-name.test.js index dfc9c8ba805..94cae4f3cc0 100644 --- a/test/config-name/config-name.test.js +++ b/test/config-name/config-name.test.js @@ -43,4 +43,10 @@ describe('--config-name flag', () => { expect(stderr).toContain('Configuration with name "test" was not found.'); expect(stdout).toBeFalsy(); }); + + it('should log error if multiple configurations are not found', () => { + const { stderr, stdout } = run(__dirname, ['--config-name', 'test', '-c', 'single-config.js'], false); + expect(stderr).toContain('Multiple configurations not found. Please use "--config-name" with multiple configurations'); + expect(stdout).toBeFalsy(); + }); }); diff --git a/test/config-name/single-config.js b/test/config-name/single-config.js new file mode 100644 index 00000000000..e5fff043bc6 --- /dev/null +++ b/test/config-name/single-config.js @@ -0,0 +1,8 @@ +module.exports = { + output: { + filename: './dist-single.js', + }, + name: 'first', + entry: './src/first.js', + mode: 'development', +};