1 | "use strict";
|
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
4 | };
|
5 | var __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 | };
|
12 | Object.defineProperty(exports, "__esModule", { value: true });
|
13 | const chalk_1 = __importDefault(require("chalk"));
|
14 | const fs = __importStar(require("fs"));
|
15 | const path = __importStar(require("path"));
|
16 | const typescript = __importStar(require("typescript"));
|
17 | const webpack_1 = __importDefault(require("webpack"));
|
18 | const webpack_merge_1 = __importDefault(require("webpack-merge"));
|
19 | const formatWebpackMessages_1 = require("../lib/formatWebpackMessages");
|
20 | const paths_1 = require("../lib/paths");
|
21 | const webpack_config_prod_1 = require("../lib/webpack.config.prod");
|
22 | const env_1 = require("../util/env");
|
23 | const fileSizeReporter_1 = require("./util/fileSizeReporter");
|
24 | const prodBundlePath = path.join(paths_1.paths.appBuild, paths_1.paths.prodBundle);
|
25 | const sizeBeforeBuild = fileSizeReporter_1.getBundleSize(prodBundlePath);
|
26 | const 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 | };
|
67 | build()
|
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 |
|
\ | No newline at end of file |