| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 | 
							- #! /usr/bin/env node
 
- const {resolve, dirname} = require('path');
 
- const _ = require('lodash');
 
- const commander = require('commander');
 
- const {magenta} = require('chalk');
 
- const analyzer = require('../analyzer');
 
- const viewer = require('../viewer');
 
- const Logger = require('../Logger');
 
- const utils = require('../utils');
 
- const SIZES = new Set(['stat', 'parsed', 'gzip']);
 
- const program = commander
 
-   .version(require('../../package.json').version)
 
-   .usage(
 
- `<bundleStatsFile> [bundleDir] [options]
 
-   Arguments:
 
-   
 
-     bundleStatsFile  Path to Webpack Stats JSON file.
 
-     bundleDir        Directory containing all generated bundles.
 
-                      You should provided it if you want analyzer to show you the real parsed module sizes.
 
-                      By default a directory of stats file is used.`
 
-   )
 
-   .option(
 
-     '-m, --mode <mode>',
 
-     'Analyzer mode. Should be `server`,`static` or `json`.' +
 
-       br('In `server` mode analyzer will start HTTP server to show bundle report.') +
 
-       br('In `static` mode single HTML file with bundle report will be generated.') +
 
-       br('In `json` mode single JSON file with bundle report will be generated.'),
 
-     'server'
 
-   )
 
-   .option(
 
-     // Had to make `host` parameter optional in order to let `-h` flag output help message
 
-     // Fixes https://github.com/webpack-contrib/webpack-bundle-analyzer/issues/239
 
-     '-h, --host [host]',
 
-     'Host that will be used in `server` mode to start HTTP server.',
 
-     '127.0.0.1'
 
-   )
 
-   .option(
 
-     '-p, --port <n>',
 
-     'Port that will be used in `server` mode to start HTTP server.',
 
-     8888
 
-   )
 
-   .option(
 
-     '-r, --report <file>',
 
-     'Path to bundle report file that will be generated in `static` mode.'
 
-   )
 
-   .option(
 
-     '-t, --title <title>',
 
-     'String to use in title element of html report.'
 
-   )
 
-   .option(
 
-     '-s, --default-sizes <type>',
 
-     'Module sizes to show in treemap by default.' +
 
-     br(`Possible values: ${[...SIZES].join(', ')}`),
 
-     'parsed'
 
-   )
 
-   .option(
 
-     '-O, --no-open',
 
-     "Don't open report in default browser automatically."
 
-   )
 
-   .option(
 
-     '-e, --exclude <regexp>',
 
-     'Assets that should be excluded from the report.' +
 
-     br('Can be specified multiple times.'),
 
-     array()
 
-   )
 
-   .option(
 
-     '-l, --log-level <level>',
 
-     'Log level.' +
 
-     br(`Possible values: ${[...Logger.levels].join(', ')}`),
 
-     Logger.defaultLevel
 
-   )
 
-   .parse(process.argv);
 
- let {
 
-   mode,
 
-   host,
 
-   port,
 
-   report: reportFilename,
 
-   title: reportTitle,
 
-   defaultSizes,
 
-   logLevel,
 
-   open: openBrowser,
 
-   exclude: excludeAssets,
 
-   args: [bundleStatsFile, bundleDir]
 
- } = program;
 
- const logger = new Logger(logLevel);
 
- if (typeof reportTitle === 'undefined') {
 
-   reportTitle = utils.defaultTitle;
 
- }
 
- if (!bundleStatsFile) showHelp('Provide path to Webpack Stats file as first argument');
 
- if (mode !== 'server' && mode !== 'static' && mode !== 'json') {
 
-   showHelp('Invalid mode. Should be either `server`, `static` or `json`.');
 
- }
 
- if (mode === 'server') {
 
-   if (!host) showHelp('Invalid host name');
 
-   port = port === 'auto' ? 0 : Number(port);
 
-   if (isNaN(port)) showHelp('Invalid port. Should be a number or `auto`');
 
- }
 
- if (!SIZES.has(defaultSizes)) showHelp(`Invalid default sizes option. Possible values are: ${[...SIZES].join(', ')}`);
 
- bundleStatsFile = resolve(bundleStatsFile);
 
- if (!bundleDir) bundleDir = dirname(bundleStatsFile);
 
- let bundleStats;
 
- try {
 
-   bundleStats = analyzer.readStatsFromFile(bundleStatsFile);
 
- } catch (err) {
 
-   logger.error(`Couldn't read webpack bundle stats from "${bundleStatsFile}":\n${err}`);
 
-   logger.debug(err.stack);
 
-   process.exit(1);
 
- }
 
- if (mode === 'server') {
 
-   viewer.startServer(bundleStats, {
 
-     openBrowser,
 
-     port,
 
-     host,
 
-     defaultSizes,
 
-     reportTitle,
 
-     bundleDir,
 
-     excludeAssets,
 
-     logger: new Logger(logLevel)
 
-   });
 
- } else if (mode === 'static') {
 
-   viewer.generateReport(bundleStats, {
 
-     openBrowser,
 
-     reportFilename: resolve(reportFilename || 'report.html'),
 
-     reportTitle,
 
-     defaultSizes,
 
-     bundleDir,
 
-     excludeAssets,
 
-     logger: new Logger(logLevel)
 
-   });
 
- } else if (mode === 'json') {
 
-   viewer.generateJSONReport(bundleStats, {
 
-     reportFilename: resolve(reportFilename || 'report.json'),
 
-     bundleDir,
 
-     excludeAssets,
 
-     logger: new Logger(logLevel)
 
-   });
 
- }
 
- function showHelp(error) {
 
-   if (error) console.log(`\n  ${magenta(error)}\n`);
 
-   program.outputHelp();
 
-   process.exit(1);
 
- }
 
- function br(str) {
 
-   return `\n${_.repeat(' ', 28)}${str}`;
 
- }
 
- function array() {
 
-   const arr = [];
 
-   return (val) => {
 
-     arr.push(val);
 
-     return arr;
 
-   };
 
- }
 
 
  |