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/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/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/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); 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', () => { 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', }; 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());