From 6f95b267bf6a3a3e71360f4de176a4ebbec3afa1 Mon Sep 17 00:00:00 2001 From: Alexander Krasnoyarov Date: Mon, 12 Oct 2020 19:56:24 +0300 Subject: [PATCH] fix: support any config name (#1926) --- packages/webpack-cli/lib/groups/ConfigGroup.js | 17 +++-------------- test/config-lookup/custom-name/a.js | 1 + .../config-lookup/custom-name/config.webpack.js | 9 +++++++++ .../custom-name/custom-name.test.js | 14 ++++++++++++++ 4 files changed, 27 insertions(+), 14 deletions(-) create mode 100644 test/config-lookup/custom-name/a.js create mode 100644 test/config-lookup/custom-name/config.webpack.js create mode 100644 test/config-lookup/custom-name/custom-name.test.js diff --git a/packages/webpack-cli/lib/groups/ConfigGroup.js b/packages/webpack-cli/lib/groups/ConfigGroup.js index 233ceebc555..ae979207d03 100644 --- a/packages/webpack-cli/lib/groups/ConfigGroup.js +++ b/packages/webpack-cli/lib/groups/ConfigGroup.js @@ -1,5 +1,5 @@ const { existsSync } = require('fs'); -const { resolve, sep, dirname, extname } = require('path'); +const { resolve, extname } = require('path'); const webpackMerge = require('webpack-merge'); const { extensions, jsVariants } = require('interpret'); const rechoir = require('rechoir'); @@ -149,8 +149,9 @@ const finalize = async (moduleObj, args) => { if (!moduleObj) { return newOptionsObject; } - const configPath = moduleObj.path; + const configOptions = moduleObj.content; + if (typeof configOptions === 'function') { // when config is a function, pass the env from args to the config function let formattedEnv; @@ -187,18 +188,6 @@ const finalize = async (moduleObj, args) => { newOptionsObject['options'] = configOptions; } - if (configOptions && configPath.includes('.webpack')) { - const currentPath = configPath; - const parentContext = dirname(currentPath).split(sep).slice(0, -1).join(sep); - if (Array.isArray(configOptions)) { - configOptions.forEach((config) => { - config.context = config.context || parentContext; - }); - } else { - configOptions.context = configOptions.context || parentContext; - } - newOptionsObject['options'] = configOptions; - } return newOptionsObject; }; diff --git a/test/config-lookup/custom-name/a.js b/test/config-lookup/custom-name/a.js new file mode 100644 index 00000000000..2651774ae60 --- /dev/null +++ b/test/config-lookup/custom-name/a.js @@ -0,0 +1 @@ +module.exports = 'foo'; diff --git a/test/config-lookup/custom-name/config.webpack.js b/test/config-lookup/custom-name/config.webpack.js new file mode 100644 index 00000000000..9b526a493e2 --- /dev/null +++ b/test/config-lookup/custom-name/config.webpack.js @@ -0,0 +1,9 @@ +const { resolve } = require('path'); + +module.exports = { + entry: resolve('./a.js'), + output: { + path: resolve(__dirname, 'binary'), + filename: 'a.bundle.js', + }, +}; diff --git a/test/config-lookup/custom-name/custom-name.test.js b/test/config-lookup/custom-name/custom-name.test.js new file mode 100644 index 00000000000..66ecfe8a93a --- /dev/null +++ b/test/config-lookup/custom-name/custom-name.test.js @@ -0,0 +1,14 @@ +'use strict'; +const { existsSync } = require('fs'); +const { resolve } = require('path'); +const { run } = require('../../utils/test-utils'); + +describe('custom config file', () => { + it('should work', () => { + const { stdout, stderr, exitCode } = run(__dirname, ['--config', resolve(__dirname, 'config.webpack.js')], false); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); + expect(existsSync(resolve(__dirname, './binary/a.bundle.js'))).toBeTruthy(); + }); +});