From 4bdd4025572112d15ef5e9cbfa2dd4f4e3ce8855 Mon Sep 17 00:00:00 2001 From: James K Nelson Date: Fri, 25 Jan 2019 19:39:01 +0900 Subject: [PATCH] Fix error messages for child compilations --- packages/react-dev-utils/README.md | 9 +++++++-- .../react-dev-utils/WebpackDevServerUtils.js | 2 +- .../react-dev-utils/formatWebpackMessages.js | 17 +++++++++++++++-- packages/react-scripts/scripts/build.js | 7 ++++++- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/packages/react-dev-utils/README.md b/packages/react-dev-utils/README.md index 24d8cce5a4e..e0f3d2c8d8b 100644 --- a/packages/react-dev-utils/README.md +++ b/packages/react-dev-utils/README.md @@ -220,7 +220,7 @@ measureFileSizesBeforeBuild(buildFolder).then(previousFileSizes => { }); ``` -#### `formatWebpackMessages({errors: Array, warnings: Array}): {errors: Array, warnings: Array}` +#### `formatWebpackMessages({errors: Array, warnings: Array, children}): {errors: Array, warnings: Array}` Extracts and prettifies warning and error messages from webpack [stats](https://github.com/webpack/docs/wiki/node.js-api#stats) object. @@ -236,7 +236,12 @@ compiler.hooks.invalid.tap('invalid', function() { }); compiler.hooks.done.tap('done', function(stats) { - var rawMessages = stats.toJson({}, true); + var rawMessages = stats.toJson({ + all: false, + children: true, + warnings: true, + errors: true, + }); var messages = formatWebpackMessages(rawMessages); if (!messages.errors.length && !messages.warnings.length) { console.log('Compiled successfully!'); diff --git a/packages/react-dev-utils/WebpackDevServerUtils.js b/packages/react-dev-utils/WebpackDevServerUtils.js index 67a1a45e3a6..a8fdbc2c6b9 100644 --- a/packages/react-dev-utils/WebpackDevServerUtils.js +++ b/packages/react-dev-utils/WebpackDevServerUtils.js @@ -153,7 +153,7 @@ function createCompiler(webpack, config, appName, urls, useYarn) { // We only construct the warnings and errors for speed: // https://github.com/facebook/create-react-app/issues/4492#issuecomment-421959548 const messages = formatWebpackMessages( - stats.toJson({ all: false, warnings: true, errors: true }) + stats.toJson({ all: false, children: true, warnings: true, errors: true }) ); const isSuccessful = !messages.errors.length && !messages.warnings.length; if (isSuccessful) { diff --git a/packages/react-dev-utils/formatWebpackMessages.js b/packages/react-dev-utils/formatWebpackMessages.js index 4b0f44acb74..74a7c18a5ac 100644 --- a/packages/react-dev-utils/formatWebpackMessages.js +++ b/packages/react-dev-utils/formatWebpackMessages.js @@ -109,11 +109,24 @@ function formatMessage(message, isError) { return message.trim(); } +function recursivelyFindMessages(json, property) { + let messages = json[property]; + if (json.children) { + json.children.forEach(function(child) { + const childMessages = recursivelyFindMessages(child, property); + messages = messages.concat(childMessages); + }); + } + return messages; +} + function formatWebpackMessages(json) { - const formattedErrors = json.errors.map(function(message) { + const errors = recursivelyFindMessages(json, 'errors'); + const formattedErrors = errors.map(function(message) { return formatMessage(message, true); }); - const formattedWarnings = json.warnings.map(function(message) { + const warnings = recursivelyFindMessages(json, 'warnings'); + const formattedWarnings = warnings.map(function(message) { return formatMessage(message, false); }); const result = { errors: formattedErrors, warnings: formattedWarnings }; diff --git a/packages/react-scripts/scripts/build.js b/packages/react-scripts/scripts/build.js index 8cd1ad77ee5..405a2f4c1ba 100644 --- a/packages/react-scripts/scripts/build.js +++ b/packages/react-scripts/scripts/build.js @@ -157,7 +157,12 @@ function build(previousFileSizes) { }); } else { messages = formatWebpackMessages( - stats.toJson({ all: false, warnings: true, errors: true }) + stats.toJson({ + all: false, + children: true, + warnings: true, + errors: true, + }) ); } if (messages.errors.length) {