diff --git a/packages/compat/webpack/src/createCompiler.ts b/packages/compat/webpack/src/createCompiler.ts index 0a4ed79d1..459da0bf1 100644 --- a/packages/compat/webpack/src/createCompiler.ts +++ b/packages/compat/webpack/src/createCompiler.ts @@ -21,11 +21,17 @@ export async function createCompiler(options: InitConfigsOptions) { | Rspack.Compiler | Rspack.MultiCompiler; - const done = (stats: unknown) => { - const { message, level } = formatStats( - stats as Rspack.Stats, - getStatsOptions(compiler), - ); + const done = (stats: Rspack.Stats) => { + const statsOptions = getStatsOptions(compiler); + const statsJson = stats.toJson({ + children: true, + ...(typeof statsOptions === 'string' + ? { preset: statsOptions } + : { preset: 'errors-warnings' }), + ...(typeof statsOptions === 'object' ? statsOptions : {}), + }); + + const { message, level } = formatStats(statsJson, stats.hasErrors()); if (level === 'error') { logger.error(message); @@ -36,7 +42,7 @@ export async function createCompiler(options: InitConfigsOptions) { }; compiler.hooks.done.tap('rsbuild:done', (stats: unknown) => { - done(stats); + done(stats as Rspack.Stats); }); if (context.normalizedConfig?.mode === 'development') { diff --git a/packages/core/src/helpers/stats.ts b/packages/core/src/helpers/stats.ts index 25979ab75..2505a6f66 100644 --- a/packages/core/src/helpers/stats.ts +++ b/packages/core/src/helpers/stats.ts @@ -130,38 +130,38 @@ export function getStatsOptions( } export function formatStats( - stats: Rspack.Stats | Rspack.MultiStats, - options: StatsValue = {}, + statsData: Rspack.StatsCompilation, + hasErrors: boolean, ): { message?: string; level?: string; } { - const statsData = stats.toJson( - typeof options === 'object' - ? { - preset: 'errors-warnings', - children: true, - ...options, - } - : options, - ); - - const { errors, warnings } = formatStatsMessages( - { - errors: getAllStatsErrors(statsData), - warnings: getAllStatsWarnings(statsData), - }, - // display verbose messages in debug mode - logger.level === 'verbose', - ); + // display verbose messages in debug mode + const verbose = logger.level === 'verbose'; + + if (hasErrors) { + const { errors } = formatStatsMessages( + { + errors: getAllStatsErrors(statsData), + warnings: [], + }, + verbose, + ); - if (stats.hasErrors()) { return { message: formatErrorMessage(errors), level: 'error', }; } + const { warnings } = formatStatsMessages( + { + errors: [], + warnings: getAllStatsWarnings(statsData), + }, + verbose, + ); + if (warnings.length) { const title = color.bold(color.yellow('Compile Warning: \n')); diff --git a/packages/core/src/provider/createCompiler.ts b/packages/core/src/provider/createCompiler.ts index f6e6ed03e..f24fea26d 100644 --- a/packages/core/src/provider/createCompiler.ts +++ b/packages/core/src/provider/createCompiler.ts @@ -62,9 +62,15 @@ export async function createCompiler(options: InitConfigsOptions): Promise<{ } const done = (stats: Rspack.Stats | Rspack.MultiStats) => { + const statsOptions = getStatsOptions(compiler); const statsJson = stats.toJson({ - all: false, + children: true, + // get the compilation time timings: true, + ...(typeof statsOptions === 'string' + ? { preset: statsOptions } + : { preset: 'errors-warnings' }), + ...(typeof statsOptions === 'object' ? statsOptions : {}), }); const printTime = (c: StatsCompilation, index: number) => { @@ -76,8 +82,10 @@ export async function createCompiler(options: InitConfigsOptions): Promise<{ } }; - if (!stats.hasErrors()) { - if (statsJson.children) { + const hasErrors = stats.hasErrors(); + + if (!hasErrors) { + if (statsJson.children && statsJson.children.length > 0) { statsJson.children.forEach((c, index) => { printTime(c, index); }); @@ -86,7 +94,7 @@ export async function createCompiler(options: InitConfigsOptions): Promise<{ } } - const { message, level } = formatStats(stats, getStatsOptions(compiler)); + const { message, level } = formatStats(statsJson, hasErrors); if (level === 'error') { logger.error(message);