diff --git a/packages/webpack-cli/lib/bootstrap.js b/packages/webpack-cli/lib/bootstrap.js index cc66f1c7cab..7b28697f038 100644 --- a/packages/webpack-cli/lib/bootstrap.js +++ b/packages/webpack-cli/lib/bootstrap.js @@ -72,7 +72,8 @@ async function runCLI(cli, commandIsUsed) { cliExecuter(); return; } - const result = await cli.run(parsedArgs.opts(), core); + const parsedArgsOpts = parsedArgs.opts(); + const result = await cli.run(parsedArgsOpts, core); if (!result) { return; } diff --git a/packages/webpack-cli/lib/groups/ZeroConfigGroup.js b/packages/webpack-cli/lib/groups/ZeroConfigGroup.js index 33e96f75916..7259a4e835b 100644 --- a/packages/webpack-cli/lib/groups/ZeroConfigGroup.js +++ b/packages/webpack-cli/lib/groups/ZeroConfigGroup.js @@ -20,7 +20,9 @@ class ZeroConfigGroup extends GroupHelper { if (process.env.NODE_ENV && (process.env.NODE_ENV === PRODUCTION || process.env.NODE_ENV === DEVELOPMENT)) { return process.env.NODE_ENV; } else { - if (this.args.mode !== undefined && (this.args.dev || this.args.prod)) { + // commander sets mode to false if --no-mode is specified + const noMode = this.args.mode === false; + if ((this.args.mode || noMode) && (this.args.dev || this.args.prod)) { logger.warn( `You provided both ${this.args.mode ? 'mode' : 'no-mode'} and ${ this.args.prod ? '--prod' : '--dev' @@ -44,7 +46,7 @@ class ZeroConfigGroup extends GroupHelper { return PRODUCTION; } else if (this.args.dev) { return DEVELOPMENT; - } else if (this.args.noMode) { + } else if (noMode) { return NONE; } return PRODUCTION; diff --git a/packages/webpack-cli/lib/utils/cli-flags.js b/packages/webpack-cli/lib/utils/cli-flags.js index b552db2ccd0..def246fe544 100644 --- a/packages/webpack-cli/lib/utils/cli-flags.js +++ b/packages/webpack-cli/lib/utils/cli-flags.js @@ -222,20 +222,20 @@ module.exports = { }, { name: 'mode', - usage: '--mode ', + usage: '--mode ', type: String, group: ZERO_CONFIG_GROUP, description: 'Defines the mode to pass to webpack', link: 'https://webpack.js.org/concepts/#mode', }, - // { - // name: 'no-mode', - // usage: '--no-mode', - // type: Boolean, - // group: ZERO_CONFIG_GROUP, - // description: 'Sets mode="none" which disables any default behavior', - // link: 'https://webpack.js.org/concepts/#mode', - // }, + { + name: 'no-mode', + usage: '--no-mode', + type: Boolean, + group: ZERO_CONFIG_GROUP, + description: 'Sets mode="none" which disables any default behavior', + link: 'https://webpack.js.org/concepts/#mode', + }, { name: 'version', usage: '--version | --version ', diff --git a/test/no-mode/no-mode.test.js b/test/no-mode/no-mode.test.js index aa71c614dfe..f2f743d2661 100644 --- a/test/no-mode/no-mode.test.js +++ b/test/no-mode/no-mode.test.js @@ -38,10 +38,11 @@ describe('no-mode flag', () => { }); }); - it('should load a production config when --mode=production & --no-mode are passed', (done) => { + it('should load a none config when --mode=production is passed before --no-mode', (done) => { const { stderr, stdout } = run(__dirname, ['--mode', 'production', '--no-mode']); expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); + expect(stdout).not.toContain('main.js.map'); stat(resolve(__dirname, './bin/main.js'), (err, stats) => { expect(err).toBe(null); @@ -50,10 +51,11 @@ describe('no-mode flag', () => { }); }); - it('should load a development config when --mode=development and --no-mode are passed', (done) => { - const { stderr, stdout } = run(__dirname, ['--mode', 'development', '--no-mode']); + it('should load a none config when --mode=production is passed after --no-mode', (done) => { + const { stderr, stdout } = run(__dirname, ['--no-mode', '--mode', 'production']); expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); + expect(stdout).toContain('main.js.map'); stat(resolve(__dirname, './bin/main.js'), (err, stats) => { expect(err).toBe(null);