diff --git a/packages/webpack-cli/lib/groups/BasicGroup.js b/packages/webpack-cli/lib/groups/BasicGroup.js index de43289985e..cbf8a41806d 100644 --- a/packages/webpack-cli/lib/groups/BasicGroup.js +++ b/packages/webpack-cli/lib/groups/BasicGroup.js @@ -36,6 +36,9 @@ class BasicGroup extends GroupHelper { if (arg === 'name') { options.name = args[arg]; } + if (arg === 'watch') { + options.watch = true; + } if (arg === 'entry') { options[arg] = this.resolveFilePath(args[arg], 'index.js'); if (options[arg].length === 0) { diff --git a/packages/webpack-cli/lib/utils/Compiler.js b/packages/webpack-cli/lib/utils/Compiler.js index 20774ddbe9e..7b34f078b28 100644 --- a/packages/webpack-cli/lib/utils/Compiler.js +++ b/packages/webpack-cli/lib/utils/Compiler.js @@ -1,5 +1,6 @@ const webpack = require('webpack'); const logger = require('./logger'); +const bailAndWatchWarning = require('./warnings/bailAndWatchWarning'); const { CompilerOutput } = require('./CompilerOutput'); class Compiler { @@ -119,9 +120,11 @@ class Compiler { if (this.compiler.compilers) { this.compiler.compilers.forEach((comp, idx) => { + bailAndWatchWarning(comp); //warn the user if bail and watch both are used together this.setUpHookForCompilation(comp, outputOptions, options[idx]); }); } else { + bailAndWatchWarning(this.compiler); this.setUpHookForCompilation(this.compiler, outputOptions, options); } diff --git a/packages/webpack-cli/lib/utils/warnings/bailAndWatchWarning.js b/packages/webpack-cli/lib/utils/warnings/bailAndWatchWarning.js new file mode 100644 index 00000000000..84894469cab --- /dev/null +++ b/packages/webpack-cli/lib/utils/warnings/bailAndWatchWarning.js @@ -0,0 +1,14 @@ +const logger = require('../logger'); + +/** + * warn the user if bail and watch both are used together + * @param {Object} webpack compiler + * @returns {void} + */ +const bailAndWatchWarning = (compiler) => { + if (compiler.options.bail && compiler.options.watch) { + logger.warn('You are using "bail" with "watch". "bail" will still exit webpack when the first error is found.'); + } +}; + +module.exports = bailAndWatchWarning; diff --git a/test/bail/bail-and-watch-warning.test.js b/test/bail/bail-and-watch-warning.test.js new file mode 100644 index 00000000000..088d8717967 --- /dev/null +++ b/test/bail/bail-and-watch-warning.test.js @@ -0,0 +1,26 @@ +'use strict'; + +const { run } = require('../utils/test-utils'); + +describe('bail and watch warning', () => { + it('should log warning in case of single compiler', () => { + const { stderr, stdout } = run(__dirname, ['-c', 'single-webpack.config.js']); + + expect(stderr).toContain(`You are using "bail" with "watch". "bail" will still exit webpack when the first error is found.`); + expect(stdout).toBeTruthy(); + }); + + it('should log warning in case of multiple compilers', () => { + const { stderr, stdout } = run(__dirname, ['-c', 'multi-webpack.config.js']); + + expect(stderr).toContain(`You are using "bail" with "watch". "bail" will still exit webpack when the first error is found.`); + expect(stdout).toBeTruthy(); + }); + + it('should log not log warning if both are not true', () => { + const { stderr, stdout } = run(__dirname, ['-c', 'third-webpack.config.js']); + + expect(stderr).not.toContain(`You are using "bail" with "watch". "bail" will still exit webpack when the first error is found.`); + expect(stdout).toBeTruthy(); + }); +}); diff --git a/test/bail/multi-webpack.config.js b/test/bail/multi-webpack.config.js new file mode 100644 index 00000000000..497c9ff6162 --- /dev/null +++ b/test/bail/multi-webpack.config.js @@ -0,0 +1,20 @@ +module.exports = [ + { + output: { + filename: './dist-first.js', + }, + name: 'first', + entry: './src/first.js', + mode: 'development', + }, + { + output: { + filename: './dist-second.js', + }, + name: 'second', + entry: './src/second.js', + mode: 'production', + bail: true, + watch: true, + }, +]; diff --git a/test/bail/single-webpack.config.js b/test/bail/single-webpack.config.js new file mode 100644 index 00000000000..132930c4f13 --- /dev/null +++ b/test/bail/single-webpack.config.js @@ -0,0 +1,6 @@ +module.exports = { + entry: './src/first.js', + mode: 'development', + bail: true, + watch: true, +}; diff --git a/test/bail/src/first.js b/test/bail/src/first.js new file mode 100644 index 00000000000..fb7e56835c4 --- /dev/null +++ b/test/bail/src/first.js @@ -0,0 +1 @@ +console.log('bail and watch warning test first'); diff --git a/test/bail/src/second.js b/test/bail/src/second.js new file mode 100644 index 00000000000..5b277372189 --- /dev/null +++ b/test/bail/src/second.js @@ -0,0 +1 @@ +console.log('bail and watch warning test second'); diff --git a/test/bail/third-webpack.config.js b/test/bail/third-webpack.config.js new file mode 100644 index 00000000000..b0b7ac2f33c --- /dev/null +++ b/test/bail/third-webpack.config.js @@ -0,0 +1,5 @@ +module.exports = { + entry: './src/first.js', + mode: 'development', + bail: true, +};