printBuildError.js 1.38 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/**
 * Copyright (c) 2015-present, Facebook, Inc.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree. An additional grant
 * of patent rights can be found in the PATENTS file in the same directory.
 */

'use strict';

const get = require('lodash/get');
const chalk = require('chalk');

module.exports = function printBuildError(err) {
  const message = get(err, 'message');
  const stack = get(err, 'stack');

  // Add more helpful message for UglifyJs error
  if (
    stack &&
    typeof message === 'string' &&
    message.indexOf('from UglifyJs') !== -1
  ) {
    try {
      const matched = /Unexpected token:(.+)\[(.+)\:(.+)\,(.+)\]\[.+\]/.exec(
        stack
      );
      if (!matched) {
        throw new Error(
          "The regex pattern is not matched. Maybe UglifyJs changed it's message?"
        );
      }
      const problemPath = matched[2];
      const line = matched[3];
      const column = matched[4];
      console.log(
        'Failed to minify the code from this file: \n\n',
        chalk.yellow(`${problemPath} line ${line}:${column}`),
        '\n'
      );
    } catch (ignored) {
      console.log('Failed to minify the code.', err);
    }
    console.log('Read more here: http://bit.ly/2tRViJ9');
  } else {
    console.log((message || err) + '\n');
  }
  console.log();
};