@gdjiami/cli
Version:
CLI for build front end project.
113 lines (112 loc) • 5.69 kB
JavaScript
;
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);
});