1 |
|
2 |
|
3 |
|
4 | const chalk = require('chalk');
|
5 | const webpack = require('webpack');
|
6 | const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages');
|
7 |
|
8 | function build(config, previousFileSizes) {
|
9 | let compiler = webpack(config);
|
10 | return new Promise((resolve, reject) => {
|
11 | compiler.run((err, stats) => {
|
12 | if (err) {
|
13 | return reject(err);
|
14 | }
|
15 | const messages = formatWebpackMessages(stats.toJson({}, true));
|
16 | if (messages.errors.length) {
|
17 |
|
18 |
|
19 | if (messages.errors.length > 1) {
|
20 | messages.errors.length = 1;
|
21 | }
|
22 | return reject(new Error(messages.errors.join('\n\n')));
|
23 | }
|
24 | if (
|
25 | process.env.CI &&
|
26 | (typeof process.env.CI !== 'string' ||
|
27 | process.env.CI.toLowerCase() !== 'false') &&
|
28 | messages.warnings.length
|
29 | ) {
|
30 | console.log(
|
31 | chalk.yellow(
|
32 | '\nTreating warnings as errors because process.env.CI = true.\n' +
|
33 | 'Most CI servers set it automatically.\n'
|
34 | )
|
35 | );
|
36 | return reject(new Error(messages.warnings.join('\n\n')));
|
37 | }
|
38 | return resolve({
|
39 | stats,
|
40 | warnings: messages.warnings,
|
41 | previousFileSizes
|
42 | });
|
43 | });
|
44 | });
|
45 | }
|
46 |
|
47 | module.exports = build;
|