diff --git a/packages/webpack-cli/lib/groups/resolveAdvanced.js b/packages/webpack-cli/lib/groups/resolveAdvanced.js index 78e074716e2..bfcca7e104f 100644 --- a/packages/webpack-cli/lib/groups/resolveAdvanced.js +++ b/packages/webpack-cli/lib/groups/resolveAdvanced.js @@ -1,9 +1,13 @@ +const { packageExists } = require('@webpack-cli/package-utils'); +const { yellow } = require('colorette'); +const { error } = require('../utils/logger'); + /** * Resolve advanced flags * @param {args} args - Parsed args passed to CLI */ const resolveAdvanced = (args) => { - const { target, prefetch, hot } = args; + const { target, prefetch, hot, analyze } = args; const finalOptions = { options: {}, @@ -28,6 +32,21 @@ const resolveAdvanced = (args) => { finalOptions.options.plugins = [prefetchVal]; } } + if (analyze) { + if (packageExists('webpack-bundle-analyzer')) { + // eslint-disable-next-line node/no-extraneous-require + const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); + const bundleAnalyzerVal = new BundleAnalyzerPlugin(); + if (finalOptions.options && finalOptions.options.plugins) { + finalOptions.options.plugins.unshift(bundleAnalyzerVal); + } else { + finalOptions.options.plugins = [bundleAnalyzerVal]; + } + } else { + error(`It looks like ${yellow('webpack-bundle-analyzer')} is not installed.`); + process.exitCode = 2; + } + } if (target) { finalOptions.options.target = args.target; } diff --git a/packages/webpack-cli/lib/utils/cli-flags.js b/packages/webpack-cli/lib/utils/cli-flags.js index 394570dddb6..d79b9175ae8 100644 --- a/packages/webpack-cli/lib/utils/cli-flags.js +++ b/packages/webpack-cli/lib/utils/cli-flags.js @@ -222,7 +222,6 @@ const core = [ usage: '--analyze', type: Boolean, multiple: false, - group: ADVANCED_GROUP, description: 'It invokes webpack-bundle-analyzer plugin to get bundle information', }, /* {