UNPKG

1.71 kBJavaScriptView Raw
1/* eslint import/no-extraneous-dependencies: 0 */
2/* eslint no-console: 0 */
3
4const chalk = require('chalk');
5const webpack = require('webpack');
6const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages');
7
8function 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 // Only keep the first error. Others are often indicative
18 // of the same problem, but confuse the reader with noise.
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
47module.exports = build;