mirror of
https://github.com/zhigang1992/create-react-app.git
synced 2026-04-03 17:16:02 +08:00
* Extract some utilities into a separate package * Add utils dir to `files` in package.json * Do not create an empty `utils` dir on eject
68 lines
2.2 KiB
JavaScript
68 lines
2.2 KiB
JavaScript
/**
|
|
* 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.
|
|
*/
|
|
|
|
// Some custom utilities to prettify Webpack output.
|
|
// This is a little hacky.
|
|
// It would be easier if webpack provided a rich error object.
|
|
var friendlySyntaxErrorLabel = 'Syntax error:';
|
|
function isLikelyASyntaxError(message) {
|
|
return message.indexOf(friendlySyntaxErrorLabel) !== -1;
|
|
}
|
|
function formatMessage(message) {
|
|
return message
|
|
// Make some common errors shorter:
|
|
.replace(
|
|
// Babel syntax error
|
|
'Module build failed: SyntaxError:',
|
|
friendlySyntaxErrorLabel
|
|
)
|
|
.replace(
|
|
// Webpack file not found error
|
|
/Module not found: Error: Cannot resolve 'file' or 'directory'/,
|
|
'Module not found:'
|
|
)
|
|
// Internal stacks are generally useless so we strip them
|
|
.replace(/^\s*at\s.*:\d+:\d+[\s\)]*\n/gm, '') // at ... ...:x:y
|
|
// Webpack loader names obscure CSS filenames
|
|
.replace('./~/css-loader!./~/postcss-loader!', '');
|
|
}
|
|
|
|
function formatWebpackMessages(stats) {
|
|
var hasErrors = stats.hasErrors();
|
|
var hasWarnings = stats.hasWarnings();
|
|
if (!hasErrors && !hasWarnings) {
|
|
return {
|
|
errors: [],
|
|
warnings: []
|
|
};
|
|
}
|
|
// We use stats.toJson({}, true) to make output more compact and readable:
|
|
// https://github.com/facebookincubator/create-react-app/issues/401#issuecomment-238291901
|
|
var json = stats.toJson({}, true);
|
|
var formattedErrors = json.errors.map(message =>
|
|
'Error in ' + formatMessage(message)
|
|
);
|
|
var formattedWarnings = json.warnings.map(message =>
|
|
'Warning in ' + formatMessage(message)
|
|
);
|
|
var result = {
|
|
errors: formattedErrors,
|
|
warnings: formattedWarnings
|
|
};
|
|
if (result.errors.some(isLikelyASyntaxError)) {
|
|
// If there are any syntax errors, show just them.
|
|
// This prevents a confusing ESLint parsing error
|
|
// preceding a much more useful Babel syntax error.
|
|
result.errors = result.errors.filter(isLikelyASyntaxError);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
module.exports = formatWebpackMessages;
|