UNPKG

@gdjiami/cli

Version:

CLI for build front end project.

113 lines (112 loc) 5.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); /** * analyze webpack bundle */ var webpack_1 = tslib_1.__importDefault(require("webpack")); var chalk_1 = tslib_1.__importDefault(require("chalk")); var fs_extra_1 = tslib_1.__importDefault(require("fs-extra")); var path_1 = tslib_1.__importDefault(require("path")); var cli_table2_1 = tslib_1.__importDefault(require("cli-table2")); var webpack_format_messages_1 = tslib_1.__importDefault(require("webpack-format-messages")); var webpack_bundle_analyzer_1 = tslib_1.__importDefault(require("webpack-bundle-analyzer")); var ora_1 = tslib_1.__importDefault(require("ora")); var utils_1 = require("../utils"); var paths_1 = tslib_1.__importDefault(require("../paths")); var options_1 = tslib_1.__importDefault(require("../options")); var config_1 = tslib_1.__importDefault(require("../config")); var mode = 'production'; process.env.NODE_ENV = mode; // initial env require('../env'); function analyze(argv) { return tslib_1.__awaiter(this, void 0, void 0, function () { var environment, pkg, jmOptions, config, group_1, table_1, spinner, compiler; var _this = this; return tslib_1.__generator(this, function (_a) { environment = require('../env').default(); pkg = require(paths_1.default.appPackageJson); jmOptions = options_1.default(pkg); if (jmOptions == null) { return [2 /*return*/]; } // FIXME: group 分析目前还有一些问题, 只能分析单一分组信息 if (argv.group) { group_1 = argv.group; utils_1.message.info("selected entries:"); table_1 = new cli_table2_1.default({ head: ['Group', 'Entries'], }); Object.keys(group_1).forEach(function (key) { // @ts-ignore table_1.push([key, group_1[key].join(', ')]); }); console.log("\n" + chalk_1.default.bgWhite(table_1.toString()) + "\n"); config = Object.keys(group_1).map(function (name) { return config_1.default(environment, pkg, paths_1.default, { name: name, entry: group_1[name], jmOptions: jmOptions, }); }); } else if (argv.entry) { // 显示指定入口 utils_1.message.info("Selected entries: " + chalk_1.default.cyan(argv.entry.join(', '))); config = config_1.default(environment, pkg, paths_1.default, { entry: argv.entry, jmOptions: jmOptions }); } else { config = config_1.default(environment, pkg, paths_1.default, { jmOptions: jmOptions }); } if (argv.inspect) { utils_1.inspect(environment.raw, 'Environment:'); utils_1.inspect(config, 'Webpack Configuration:'); return [2 /*return*/]; } spinner = ora_1.default({ text: 'Extracting webpack stats...' }).start(); compiler = webpack_1.default(config); compiler.outputFileSystem = utils_1.noopFileSystem; compiler.run(function (err, stats) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var messages, port, json; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: if (err) { spinner.stopAndPersist({ text: 'Failed to compile.', symbol: utils_1.logSymbols.error }); console.error(err.stack || err); // @ts-ignore if (err.details) { // @ts-ignore console.error(err.details); } return [2 /*return*/]; } if (stats.hasErrors()) { spinner.stopAndPersist({ text: 'Failed to compile.\n\n', symbol: utils_1.logSymbols.error }); messages = webpack_format_messages_1.default(stats); if (messages.errors.length) { messages.errors.forEach(function (e) { return console.log(e); }); } return [2 /*return*/]; } return [4 /*yield*/, utils_1.choosePort(8888)]; case 1: port = _a.sent(); json = stats.toJson(); webpack_bundle_analyzer_1.default.start(json, { port: port }); return [4 /*yield*/, fs_extra_1.default.writeJSON(path_1.default.join(paths_1.default.appDist, 'stat.json'), json)]; case 2: _a.sent(); spinner.stopAndPersist({ text: 'Extract successfully.', symbol: utils_1.logSymbols.success }); return [2 /*return*/]; } }); }); }); return [2 /*return*/]; }); }); } exports.default = (function (argv) { analyze(argv); });