From 2cdf495e7e0dd62f0acb96f44563aa4ab2adcd02 Mon Sep 17 00:00:00 2001 From: neverland Date: Wed, 19 Nov 2025 09:59:54 +0800 Subject: [PATCH 1/5] feat: improve build time logs with error state --- .../diagnostic/build-failed-time/index.test.ts | 15 +++++++++++++++ .../diagnostic/build-failed-time/src/index.js | 1 + e2e/cases/diagnostic/build-time/index.test.ts | 13 +++++++++++++ e2e/cases/diagnostic/build-time/src/index.js | 1 + packages/core/src/provider/createCompiler.ts | 18 ++++++++++-------- 5 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 e2e/cases/diagnostic/build-failed-time/index.test.ts create mode 100644 e2e/cases/diagnostic/build-failed-time/src/index.js create mode 100644 e2e/cases/diagnostic/build-time/index.test.ts create mode 100644 e2e/cases/diagnostic/build-time/src/index.js diff --git a/e2e/cases/diagnostic/build-failed-time/index.test.ts b/e2e/cases/diagnostic/build-failed-time/index.test.ts new file mode 100644 index 0000000000..c2d6a3e760 --- /dev/null +++ b/e2e/cases/diagnostic/build-failed-time/index.test.ts @@ -0,0 +1,15 @@ +import { test } from '@e2e/helper'; + +const EXPECTED_LOG = /built failed in [\d.]+ s/; + +test('should print build failed time in dev', async ({ devOnly }) => { + const rsbuild = await devOnly(); + await rsbuild.expectLog(EXPECTED_LOG); +}); + +test('should print build failed time in build', async ({ build }) => { + const rsbuild = await build({ + catchBuildError: true, + }); + await rsbuild.expectLog(EXPECTED_LOG); +}); diff --git a/e2e/cases/diagnostic/build-failed-time/src/index.js b/e2e/cases/diagnostic/build-failed-time/src/index.js new file mode 100644 index 0000000000..929f6e8c92 --- /dev/null +++ b/e2e/cases/diagnostic/build-failed-time/src/index.js @@ -0,0 +1 @@ +import './unexist'; diff --git a/e2e/cases/diagnostic/build-time/index.test.ts b/e2e/cases/diagnostic/build-time/index.test.ts new file mode 100644 index 0000000000..165c9ed494 --- /dev/null +++ b/e2e/cases/diagnostic/build-time/index.test.ts @@ -0,0 +1,13 @@ +import { test } from '@e2e/helper'; + +const EXPECTED_LOG = /built in [\d.]+ s/; + +test('should print build time in dev', async ({ devOnly }) => { + const rsbuild = await devOnly(); + await rsbuild.expectLog(EXPECTED_LOG); +}); + +test('should print build time in build', async ({ build }) => { + const rsbuild = await build(); + await rsbuild.expectLog(EXPECTED_LOG); +}); diff --git a/e2e/cases/diagnostic/build-time/src/index.js b/e2e/cases/diagnostic/build-time/src/index.js new file mode 100644 index 0000000000..8b1a393741 --- /dev/null +++ b/e2e/cases/diagnostic/build-time/src/index.js @@ -0,0 +1 @@ +// empty diff --git a/packages/core/src/provider/createCompiler.ts b/packages/core/src/provider/createCompiler.ts index 56e0df99d8..5741898f6d 100644 --- a/packages/core/src/provider/createCompiler.ts +++ b/packages/core/src/provider/createCompiler.ts @@ -186,7 +186,7 @@ export async function createCompiler(options: InitConfigsOptions): Promise<{ }); } - const printTime = (index: number) => { + const printTime = (index: number, hasErrors: boolean) => { if (startTime === null) { return; } @@ -197,13 +197,16 @@ export async function createCompiler(options: InitConfigsOptions): Promise<{ // When using multiple compilers, print the name to distinguish different environments const suffix = isMultiCompiler ? color.dim(` (${name})`) : ''; - logger.ready(`built in ${prettyTime(time / 1000)}${suffix}`); + const loggerMethod = hasErrors ? logger.error : logger.ready; + loggerMethod( + `built ${hasErrors ? 'failed ' : ''}in ${prettyTime(time / 1000)}${suffix}`, + ); }; if (isMultiCompiler) { (compiler as Rspack.MultiCompiler).compilers.forEach((item, index) => { - item.hooks.done.tap(HOOK_NAME, () => { - printTime(index); + item.hooks.done.tap(HOOK_NAME, (stats) => { + printTime(index, stats.hasErrors()); }); }); } @@ -219,10 +222,6 @@ export async function createCompiler(options: InitConfigsOptions): Promise<{ context.buildState.hasErrors = hasErrors; context.socketServer?.onBuildDone(); - if (!isMultiCompiler) { - printTime(0); - } - const { message, level } = formatStats(stats, hasErrors); if (level === 'error') { @@ -231,6 +230,9 @@ export async function createCompiler(options: InitConfigsOptions): Promise<{ if (level === 'warning') { logger.warn(message); } + if (!isMultiCompiler) { + printTime(0, hasErrors); + } isCompiling = false; }, From e3aa3accf8d6e1dd59b032ef841cc0721dc17600 Mon Sep 17 00:00:00 2001 From: neverland Date: Wed, 19 Nov 2025 10:06:24 +0800 Subject: [PATCH 2/5] fix --- e2e/cases/diagnostic/build-failed-time/index.test.ts | 2 +- e2e/cases/diagnostic/build-failed-time/src/index.js | 2 +- packages/compat/webpack/src/progress/helpers/nonTty.ts | 2 +- packages/core/src/provider/createCompiler.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/e2e/cases/diagnostic/build-failed-time/index.test.ts b/e2e/cases/diagnostic/build-failed-time/index.test.ts index c2d6a3e760..1b44a5ba57 100644 --- a/e2e/cases/diagnostic/build-failed-time/index.test.ts +++ b/e2e/cases/diagnostic/build-failed-time/index.test.ts @@ -1,6 +1,6 @@ import { test } from '@e2e/helper'; -const EXPECTED_LOG = /built failed in [\d.]+ s/; +const EXPECTED_LOG = /build failed in [\d.]+ s/; test('should print build failed time in dev', async ({ devOnly }) => { const rsbuild = await devOnly(); diff --git a/e2e/cases/diagnostic/build-failed-time/src/index.js b/e2e/cases/diagnostic/build-failed-time/src/index.js index 929f6e8c92..e2c4d02f78 100644 --- a/e2e/cases/diagnostic/build-failed-time/src/index.js +++ b/e2e/cases/diagnostic/build-failed-time/src/index.js @@ -1 +1 @@ -import './unexist'; +import './not-exist.js'; diff --git a/packages/compat/webpack/src/progress/helpers/nonTty.ts b/packages/compat/webpack/src/progress/helpers/nonTty.ts index 72c65bb218..a5cf8a3183 100644 --- a/packages/compat/webpack/src/progress/helpers/nonTty.ts +++ b/packages/compat/webpack/src/progress/helpers/nonTty.ts @@ -27,7 +27,7 @@ export function createNonTTYLogger() { prevPercentage = 100; if (hasErrors) { - logger.error(`built failed in ${compileTime} ${suffix}`); + logger.error(`build failed in ${compileTime} ${suffix}`); } else { logger.ready(`built in ${compileTime} ${suffix}`); } diff --git a/packages/core/src/provider/createCompiler.ts b/packages/core/src/provider/createCompiler.ts index 5741898f6d..5a3c873c52 100644 --- a/packages/core/src/provider/createCompiler.ts +++ b/packages/core/src/provider/createCompiler.ts @@ -199,7 +199,7 @@ export async function createCompiler(options: InitConfigsOptions): Promise<{ const suffix = isMultiCompiler ? color.dim(` (${name})`) : ''; const loggerMethod = hasErrors ? logger.error : logger.ready; loggerMethod( - `built ${hasErrors ? 'failed ' : ''}in ${prettyTime(time / 1000)}${suffix}`, + `${hasErrors ? 'build failed' : 'built'} in ${prettyTime(time / 1000)}${suffix}`, ); }; From db1fa6c0f8093959fd23b4ac907d4e971dc23ff2 Mon Sep 17 00:00:00 2001 From: neverland Date: Wed, 19 Nov 2025 10:10:30 +0800 Subject: [PATCH 3/5] fix --- packages/core/src/provider/createCompiler.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/core/src/provider/createCompiler.ts b/packages/core/src/provider/createCompiler.ts index 5a3c873c52..204c6ff454 100644 --- a/packages/core/src/provider/createCompiler.ts +++ b/packages/core/src/provider/createCompiler.ts @@ -197,10 +197,13 @@ export async function createCompiler(options: InitConfigsOptions): Promise<{ // When using multiple compilers, print the name to distinguish different environments const suffix = isMultiCompiler ? color.dim(` (${name})`) : ''; - const loggerMethod = hasErrors ? logger.error : logger.ready; - loggerMethod( - `${hasErrors ? 'build failed' : 'built'} in ${prettyTime(time / 1000)}${suffix}`, - ); + const timeStr = `${prettyTime(time / 1000)}${suffix}`; + + if (hasErrors) { + logger.error(`build failed in ${timeStr}`); + } else { + logger.ready(`built in ${timeStr}`); + } }; if (isMultiCompiler) { From 078b4ef80ffd82b30525157b20300e2f69e8c7cd Mon Sep 17 00:00:00 2001 From: neverland Date: Wed, 19 Nov 2025 10:16:01 +0800 Subject: [PATCH 4/5] fix --- e2e/cases/diagnostic/build-failed-time/index.test.ts | 6 +++--- e2e/cases/diagnostic/build-time/index.test.ts | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/e2e/cases/diagnostic/build-failed-time/index.test.ts b/e2e/cases/diagnostic/build-failed-time/index.test.ts index 1b44a5ba57..877f48632a 100644 --- a/e2e/cases/diagnostic/build-failed-time/index.test.ts +++ b/e2e/cases/diagnostic/build-failed-time/index.test.ts @@ -1,13 +1,13 @@ -import { test } from '@e2e/helper'; +import { rspackTest, test } from '@e2e/helper'; const EXPECTED_LOG = /build failed in [\d.]+ s/; -test('should print build failed time in dev', async ({ devOnly }) => { +rspackTest('should print build failed time in dev', async ({ devOnly }) => { const rsbuild = await devOnly(); await rsbuild.expectLog(EXPECTED_LOG); }); -test('should print build failed time in build', async ({ build }) => { +rspackTest('should print build failed time in build', async ({ build }) => { const rsbuild = await build({ catchBuildError: true, }); diff --git a/e2e/cases/diagnostic/build-time/index.test.ts b/e2e/cases/diagnostic/build-time/index.test.ts index 165c9ed494..f158b66436 100644 --- a/e2e/cases/diagnostic/build-time/index.test.ts +++ b/e2e/cases/diagnostic/build-time/index.test.ts @@ -1,13 +1,13 @@ -import { test } from '@e2e/helper'; +import { rspackTest } from '@e2e/helper'; const EXPECTED_LOG = /built in [\d.]+ s/; -test('should print build time in dev', async ({ devOnly }) => { +rspackTest('should print build time in dev', async ({ devOnly }) => { const rsbuild = await devOnly(); await rsbuild.expectLog(EXPECTED_LOG); }); -test('should print build time in build', async ({ build }) => { +rspackTest('should print build time in build', async ({ build }) => { const rsbuild = await build(); await rsbuild.expectLog(EXPECTED_LOG); }); From 7a0e2b4a60bb794f513818124a514bfcfcdb8b6a Mon Sep 17 00:00:00 2001 From: neverland Date: Wed, 19 Nov 2025 10:23:47 +0800 Subject: [PATCH 5/5] fix --- e2e/cases/diagnostic/build-failed-time/index.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/cases/diagnostic/build-failed-time/index.test.ts b/e2e/cases/diagnostic/build-failed-time/index.test.ts index 877f48632a..17aa94c4fb 100644 --- a/e2e/cases/diagnostic/build-failed-time/index.test.ts +++ b/e2e/cases/diagnostic/build-failed-time/index.test.ts @@ -1,4 +1,4 @@ -import { rspackTest, test } from '@e2e/helper'; +import { rspackTest } from '@e2e/helper'; const EXPECTED_LOG = /build failed in [\d.]+ s/;