From c82652e5651de9dde58988f11b938e0ef9a12e52 Mon Sep 17 00:00:00 2001 From: Shimon Doodkin Date: Fri, 31 Jan 2025 22:31:34 +0200 Subject: [PATCH 1/2] Update build.js check if error message has filename, to not print single error with no filename --- packages/react-scripts/scripts/build.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/react-scripts/scripts/build.js b/packages/react-scripts/scripts/build.js index 7a3a635a5d3..6b92148429b 100644 --- a/packages/react-scripts/scripts/build.js +++ b/packages/react-scripts/scripts/build.js @@ -173,8 +173,12 @@ function build(previousFileSizes) { if (messages.errors.length) { // Only keep the first error. Others are often indicative // of the same problem, but confuse the reader with noise. - if (messages.errors.length > 1) { - messages.errors.length = 1; + const re = /\S+:\d+:\d+/; // check if error message has filename with line number, to not print errors with no filename or line number + for(let i = 0; i < messages.errors.length; i++) { + if(re.test(messages.errors[i])) { + messages.errors.length = i+1; + break; + } } return reject(new Error(messages.errors.join('\n\n'))); } From 2dd72095820a2faf19358efee5fa27ebb9764bc6 Mon Sep 17 00:00:00 2001 From: Shimon Doodkin Date: Fri, 31 Jan 2025 22:37:41 +0200 Subject: [PATCH 2/2] Update formatWebpackMessages.js - ensure message contains filename --- .../react-dev-utils/formatWebpackMessages.js | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/react-dev-utils/formatWebpackMessages.js b/packages/react-dev-utils/formatWebpackMessages.js index 1d0f7c5cdae..53a48e3fea1 100644 --- a/packages/react-dev-utils/formatWebpackMessages.js +++ b/packages/react-dev-utils/formatWebpackMessages.js @@ -13,18 +13,33 @@ function isLikelyASyntaxError(message) { return message.indexOf(friendlySyntaxErrorLabel) !== -1; } +function cleanTerminalColors(input) { + // Regular expression to match ANSI escape codes + const ansiRegex = /\x1B\[[0-9;]*[a-zA-Z]/g; + // Remove ANSI escape codes from the input string + return input.replace(ansiRegex, ''); +} + // Cleans up webpack error messages. function formatMessage(message) { let lines = []; if (typeof message === 'string') { - lines = message.split('\n'); + lines = cleanTerminalColors(message).split('\n'); } else if ('message' in message) { - lines = message['message'].split('\n'); + lines = cleanTerminalColors(message['message']).split('\n'); + // ensure message contains filename + if ('file' in message && !message['message'].includes(message.file)) { + lines.unshift("While building top file: " + message.file); + } } else if (Array.isArray(message)) { message.forEach(message => { if ('message' in message) { - lines = message['message'].split('\n'); + lines = cleanTerminalColors(message['message']).split('\n'); + // ensure message contains filename + if ('file' in message && !message['message'].includes(message.file)) { + lines.unshift("While building top file: " + message.file); + } } }); }