UNPKG

4.23 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5var __importStar = (this && this.__importStar) || function (mod) {
6 if (mod && mod.__esModule) return mod;
7 var result = {};
8 if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
9 result["default"] = mod;
10 return result;
11};
12Object.defineProperty(exports, "__esModule", { value: true });
13const chalk_1 = __importDefault(require("chalk"));
14const fs = __importStar(require("fs"));
15const path = __importStar(require("path"));
16const typescript = __importStar(require("typescript"));
17const webpack_1 = __importDefault(require("webpack"));
18const webpack_merge_1 = __importDefault(require("webpack-merge"));
19const formatWebpackMessages_1 = require("../lib/formatWebpackMessages");
20const paths_1 = require("../lib/paths");
21const webpack_config_prod_1 = require("../lib/webpack.config.prod");
22const env_1 = require("../util/env");
23const fileSizeReporter_1 = require("./util/fileSizeReporter");
24const prodBundlePath = path.join(paths_1.paths.appBuild, paths_1.paths.prodBundle);
25const sizeBeforeBuild = fileSizeReporter_1.getBundleSize(prodBundlePath);
26const build = () => {
27 let compiler;
28 console.log(chalk_1.default.cyan('Creating an optimized production build...'));
29 console.log(chalk_1.default.green('Using TypeScript v' + typescript.version));
30 if (fs.existsSync(paths_1.paths.webpackOverride)) {
31 console.log(chalk_1.default.yellow('[EXPERIMENTAL] Detected webpack.config.override.js file, merging configuration...'));
32 const mergedConfig = webpack_merge_1.default(webpack_config_prod_1.WebpackProdConfig, require(paths_1.paths.webpackOverride));
33 compiler = webpack_1.default(mergedConfig);
34 }
35 else {
36 compiler = webpack_1.default(webpack_config_prod_1.WebpackProdConfig);
37 }
38 return new Promise((resolve, reject) => {
39 compiler.run((err, stats) => {
40 if (err) {
41 return reject(err);
42 }
43 const messages = formatWebpackMessages_1.formatWebpackMessages(stats.toJson());
44 if (messages.errors.length) {
45 if (messages.errors.length > 1 && !env_1.RuntimeOptions.noCollapse) {
46 messages.errors.length = 1;
47 }
48 return reject(new Error(messages.errors.join('\n\n')));
49 }
50 if (env_1.IS_CI && messages.warnings.length) {
51 if (env_1.RuntimeOptions.bypassCiWarnings) {
52 console.log(chalk_1.default.yellow('\nBypassing warnings as CI errors due to --bypass-ci-warnings option.\n'));
53 }
54 else {
55 console.log(chalk_1.default.yellow('\nTreating warnings as errors because process.env.CI = true.\n' +
56 'Most CI servers set it automatically.\n'));
57 return reject(new Error(messages.warnings.join('\n\n')));
58 }
59 }
60 return resolve({
61 stats,
62 warnings: messages.warnings,
63 });
64 });
65 });
66};
67build()
68 .then(({ warnings }) => {
69 if (warnings.length) {
70 console.log(chalk_1.default.yellow('Compiled with warnings.\n'));
71 console.log(warnings.join('\n\n'));
72 console.log('\nSearch for the keywords to learn more about each warning.');
73 console.log('To ignore, add ' +
74 chalk_1.default.cyan('// tslint:disable-next-line') +
75 ' to the line before.\n');
76 }
77}, err => {
78 console.log(chalk_1.default.red('Failed to compile.\n'));
79 console.log(err.message);
80 console.log();
81 process.exit(1);
82})
83 .then(() => {
84 const sizeAfterBuild = fileSizeReporter_1.getBundleSize(prodBundlePath);
85 console.log();
86 console.log(chalk_1.default.greenBright('Successfully built bundle.prod.js!'));
87 console.log('Bundle size: ' + fileSizeReporter_1.diffFileSize(sizeBeforeBuild, sizeAfterBuild));
88 console.log();
89})
90 .catch(err => {
91 if (err && err.message) {
92 console.log(err.message);
93 }
94 process.exit(1);
95});
96//# sourceMappingURL=build.js.map
\No newline at end of file