From b6d684cdcabd86ef1b81dbd301629a905362d225 Mon Sep 17 00:00:00 2001 From: Anshuman Verma Date: Tue, 10 Nov 2020 18:22:54 +0530 Subject: [PATCH 1/4] fix: defer setting default mode to core --- packages/webpack-cli/lib/webpack-cli.js | 12 ++++++++---- test/mode/mode-single-arg/mode-single-arg.test.js | 5 +++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/webpack-cli/lib/webpack-cli.js b/packages/webpack-cli/lib/webpack-cli.js index 327216f3c08..f57b5bd2e7f 100644 --- a/packages/webpack-cli/lib/webpack-cli.js +++ b/packages/webpack-cli/lib/webpack-cli.js @@ -112,8 +112,6 @@ class WebpackCLI { finalMode = configMode; } else if (NODE_ENV && (NODE_ENV === PRODUCTION || NODE_ENV === DEVELOPMENT)) { finalMode = NODE_ENV; - } else { - finalMode = PRODUCTION; } return finalMode; @@ -208,10 +206,16 @@ class WebpackCLI { // Todo - handle multi config for all flags finalOptions.options = configOptions.map(() => ({ ...finalOptions.options })); configOptions.forEach((configObject, index) => { - finalOptions.options[index].mode = assignMode(mode, configObject); + const resolvedMode = assignMode(mode, configObject); + if (resolvedMode) { + finalOptions.options[index].mode = resolvedMode; + } }); } else { - finalOptions.options.mode = assignMode(mode, configOptions); + const resolvedMode = assignMode(mode, configOptions); + if (resolvedMode) { + finalOptions.options.mode = resolvedMode; + } } return finalOptions; diff --git a/test/mode/mode-single-arg/mode-single-arg.test.js b/test/mode/mode-single-arg/mode-single-arg.test.js index c3577ac844c..d586c687049 100644 --- a/test/mode/mode-single-arg/mode-single-arg.test.js +++ b/test/mode/mode-single-arg/mode-single-arg.test.js @@ -2,12 +2,13 @@ const { run } = require('../../utils/test-utils'); describe('mode flags', () => { - it('should set mode=production by default', () => { + it('should not set mode=production by default', () => { const { stderr, stdout, exitCode } = run(__dirname); expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); - expect(stdout).toContain(`mode: 'production'`); + expect(stdout).not.toContain(`mode: 'production'`); + expect(stdout).toContain(`The 'mode' option has not been set, webpack will fallback to 'production' for this value.`); }); it('should load a development config when --mode=development is passed', () => { From 713e377158fc9ae4d6763491c9cc516054e4174c Mon Sep 17 00:00:00 2001 From: Anshuman Verma Date: Tue, 10 Nov 2020 19:32:09 +0530 Subject: [PATCH 2/4] tests: fix --- test/build-warnings/warnings.test.js | 4 ++-- test/defaults/output-defaults.test.js | 4 ++-- test/merge/config/merge-config.test.js | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/test/build-warnings/warnings.test.js b/test/build-warnings/warnings.test.js index cb049a150b8..576f59a4848 100644 --- a/test/build-warnings/warnings.test.js +++ b/test/build-warnings/warnings.test.js @@ -21,7 +21,7 @@ describe('warnings', () => { const json = JSON.parse(stdout); expect(json['hash']).toBeDefined(); - expect(json['warnings']).toHaveLength(1); + expect(json['warnings']).toHaveLength(2); // `message` for `webpack@5` expect(json['warnings'][0].message ? json['warnings'][0].message : json['warnings'][0]).toMatch(/Can't resolve/); }); @@ -43,7 +43,7 @@ describe('warnings', () => { const json = JSON.parse(data); expect(json['hash']).toBeDefined(); - expect(json['warnings']).toHaveLength(1); + expect(json['warnings']).toHaveLength(2); // `message` for `webpack@5` expect(json['warnings'][0].message ? json['warnings'][0].message : json['warnings'][0]).toMatch(/Can't resolve/); diff --git a/test/defaults/output-defaults.test.js b/test/defaults/output-defaults.test.js index 6166d346ab9..d96c9dd4c1d 100644 --- a/test/defaults/output-defaults.test.js +++ b/test/defaults/output-defaults.test.js @@ -9,8 +9,8 @@ describe('output flag defaults', () => { expect(stderr).toBeFalsy(); expect(exitCode).toBe(0); - // Should not print warning about config fallback, as we have production as default - expect(stdout).not.toContain('option has not been set, webpack will fallback to'); + // Should print warning about config fallback + expect(stdout).toContain('option has not been set, webpack will fallback to'); stat(resolve(__dirname, './binary/main.js'), (err, stats) => { expect(err).toBe(null); expect(stats.isFile()).toBe(true); diff --git a/test/merge/config/merge-config.test.js b/test/merge/config/merge-config.test.js index 926ff5e4bbb..cf9afc5f647 100644 --- a/test/merge/config/merge-config.test.js +++ b/test/merge/config/merge-config.test.js @@ -8,7 +8,7 @@ const { run } = require('../../utils/test-utils'); describe('merge flag configuration', () => { it('merges two configurations together', () => { const { stdout, stderr, exitCode } = run(__dirname, ['--config', './1.js', '-c', './2.js', '--merge'], false); - expect(stdout).not.toContain('option has not been set, webpack will fallback to'); + expect(stdout).toContain('option has not been set, webpack will fallback to'); expect(existsSync(resolve(__dirname, './dist/merged.js'))).toBeTruthy(); expect(stderr).toBeFalsy(); expect(exitCode).toBe(0); From e28087ce9e5f52516f9de0140e6e17ca35ecf908 Mon Sep 17 00:00:00 2001 From: Anshuman Verma Date: Wed, 11 Nov 2020 20:48:09 +0530 Subject: [PATCH 3/4] tests: fix --- test/colors/colors-false.webpack.config.js | 1 + test/colors/colors-true.webpack.config.js | 1 + test/colors/multiple-configs.js | 2 ++ test/colors/no-stats.webpack.config.js | 1 + test/colors/stats-boolean.webpack.config.js | 1 + test/colors/stats-string.webpack.config.js | 1 + test/colors/webpack.config.js | 3 +++ test/watch/watch-flag.test.js | 4 ++-- 8 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 test/colors/webpack.config.js diff --git a/test/colors/colors-false.webpack.config.js b/test/colors/colors-false.webpack.config.js index b0f58638bfa..ca20696f2e3 100644 --- a/test/colors/colors-false.webpack.config.js +++ b/test/colors/colors-false.webpack.config.js @@ -2,4 +2,5 @@ module.exports = { stats: { colors: false, }, + mode: 'production', }; diff --git a/test/colors/colors-true.webpack.config.js b/test/colors/colors-true.webpack.config.js index 15fc57eafd8..76255bff92d 100644 --- a/test/colors/colors-true.webpack.config.js +++ b/test/colors/colors-true.webpack.config.js @@ -2,4 +2,5 @@ module.exports = { stats: { colors: true, }, + mode: 'production', }; diff --git a/test/colors/multiple-configs.js b/test/colors/multiple-configs.js index b175991ac4d..0828c36394a 100644 --- a/test/colors/multiple-configs.js +++ b/test/colors/multiple-configs.js @@ -3,10 +3,12 @@ module.exports = [ name: 'first-config', entry: './src/first.js', stats: 'normal', + mode: 'production', }, { name: 'second-config', entry: './src/second.js', stats: 'normal', + mode: 'production', }, ]; diff --git a/test/colors/no-stats.webpack.config.js b/test/colors/no-stats.webpack.config.js index 34672801b3d..71af9d200a9 100644 --- a/test/colors/no-stats.webpack.config.js +++ b/test/colors/no-stats.webpack.config.js @@ -1,3 +1,4 @@ module.exports = { name: 'test', + mode: 'production', }; diff --git a/test/colors/stats-boolean.webpack.config.js b/test/colors/stats-boolean.webpack.config.js index 1c9b636be33..9f947b31986 100644 --- a/test/colors/stats-boolean.webpack.config.js +++ b/test/colors/stats-boolean.webpack.config.js @@ -1,3 +1,4 @@ module.exports = { stats: true, + mode: 'production', }; diff --git a/test/colors/stats-string.webpack.config.js b/test/colors/stats-string.webpack.config.js index 5c13e746a6a..d3712a1cf09 100644 --- a/test/colors/stats-string.webpack.config.js +++ b/test/colors/stats-string.webpack.config.js @@ -1,3 +1,4 @@ module.exports = { stats: 'verbose', + mode: 'production', }; diff --git a/test/colors/webpack.config.js b/test/colors/webpack.config.js new file mode 100644 index 00000000000..5b69c702150 --- /dev/null +++ b/test/colors/webpack.config.js @@ -0,0 +1,3 @@ +module.exports = { + mode: 'production', +}; diff --git a/test/watch/watch-flag.test.js b/test/watch/watch-flag.test.js index e326fed48d8..fc6d3c153a8 100644 --- a/test/watch/watch-flag.test.js +++ b/test/watch/watch-flag.test.js @@ -10,7 +10,7 @@ const wordsInStatsv5 = ['asset', 'index.js', 'compiled successfully']; describe('--watch flag', () => { it('should recompile upon file change', (done) => { - const proc = runAndGetWatchProc(__dirname, ['--watch'], false, '', true); + const proc = runAndGetWatchProc(__dirname, ['--watch', '--mode', 'production'], false, '', true); let semaphore = 0; proc.stdout.on('data', (chunk) => { const data = stripAnsi(chunk.toString()); @@ -45,7 +45,7 @@ describe('--watch flag', () => { }); it('should print compilation lifecycle', (done) => { - const proc = runAndGetWatchProc(__dirname, ['--watch'], false, '', true); + const proc = runAndGetWatchProc(__dirname, ['--watch', '--mode', 'production'], false, '', true); let semaphore = 0; proc.stdout.on('data', (chunk) => { const data = stripAnsi(chunk.toString()); From 560ebb2f9985f50fd3562a2f02e735346f9e5faf Mon Sep 17 00:00:00 2001 From: Anshuman Verma Date: Wed, 11 Nov 2020 21:41:36 +0530 Subject: [PATCH 4/4] tests: fix --- test/stats/watch/webpack.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/stats/watch/webpack.config.js b/test/stats/watch/webpack.config.js index e7e1987f001..65a1ecbbe75 100644 --- a/test/stats/watch/webpack.config.js +++ b/test/stats/watch/webpack.config.js @@ -1,4 +1,5 @@ module.exports = { watch: true, stats: 'none', + mode: 'production', };