Skip to content

Commit 6d7fdb9

Browse files
clydinalan-agius4
authored andcommitted
fix(@angular-devkit/build-angular): show diagnostic messages after build stats
To improve the readability and discoverability of any warnings or errors present during build, the diagnostic messages will be shown after the build stats are displayed. For large projects the amount of generated files previously could cause warnings to scroll off the screen and potentially be missed. (cherry picked from commit 4813586)
1 parent 626a5ad commit 6d7fdb9

File tree

2 files changed

+40
-42
lines changed

2 files changed

+40
-42
lines changed

packages/angular_devkit/build_angular/src/builders/application/execute-build.ts

+13-40
Original file line numberDiff line numberDiff line change
@@ -208,20 +208,12 @@ export async function executeBuild(
208208
if (options.budgets) {
209209
const compatStats = generateBudgetStats(metafile, initialFiles);
210210
budgetFailures = [...checkBudgets(options.budgets, compatStats, true)];
211-
if (budgetFailures.length > 0) {
212-
const errors = budgetFailures
213-
.filter((failure) => failure.severity === 'error')
214-
.map(({ message }) => message);
215-
const warnings = budgetFailures
216-
.filter((failure) => failure.severity !== 'error')
217-
.map(({ message }) => message);
218-
219-
await printWarningsAndErrorsToConsoleAndAddToResult(
220-
context,
221-
executionResult,
222-
warnings,
223-
errors,
224-
);
211+
for (const { message, severity } of budgetFailures) {
212+
if (severity === 'error') {
213+
executionResult.addError(message);
214+
} else {
215+
executionResult.addWarning(message);
216+
}
225217
}
226218
}
227219

@@ -234,7 +226,7 @@ export async function executeBuild(
234226
// Check metafile for CommonJS module usage if optimizing scripts
235227
if (optimizationOptions.scripts) {
236228
const messages = checkCommonJSModules(metafile, options.allowedCommonJsDependencies);
237-
await logMessages(context, { warnings: messages });
229+
executionResult.addWarnings(messages);
238230
}
239231

240232
// Copy assets
@@ -255,12 +247,10 @@ export async function executeBuild(
255247

256248
// Perform i18n translation inlining if enabled
257249
let prerenderedRoutes: string[];
258-
let errors: string[];
259-
let warnings: string[];
260250
if (i18nOptions.shouldInline) {
261251
const result = await inlineI18n(options, executionResult, initialFiles);
262-
errors = result.errors;
263-
warnings = result.warnings;
252+
executionResult.addErrors(result.errors);
253+
executionResult.addWarnings(result.warnings);
264254
prerenderedRoutes = result.prerenderedRoutes;
265255
} else {
266256
const result = await executePostBundleSteps(
@@ -272,15 +262,13 @@ export async function executeBuild(
272262
i18nOptions.hasDefinedSourceLocale ? i18nOptions.sourceLocale : undefined,
273263
);
274264

275-
errors = result.errors;
276-
warnings = result.warnings;
265+
executionResult.addErrors(result.errors);
266+
executionResult.addWarnings(result.warnings);
277267
prerenderedRoutes = result.prerenderedRoutes;
278268
executionResult.outputFiles.push(...result.additionalOutputFiles);
279269
executionResult.assetFiles.push(...result.additionalAssets);
280270
}
281271

282-
await printWarningsAndErrorsToConsoleAndAddToResult(context, executionResult, warnings, errors);
283-
284272
if (prerenderOptions) {
285273
executionResult.addOutputFile(
286274
'prerendered-routes.json',
@@ -307,6 +295,8 @@ export async function executeBuild(
307295
estimatedTransferSizes,
308296
);
309297

298+
await logMessages(context, executionResult);
299+
310300
// Write metafile if stats option is enabled
311301
if (options.stats) {
312302
executionResult.addOutputFile(
@@ -318,20 +308,3 @@ export async function executeBuild(
318308

319309
return executionResult;
320310
}
321-
322-
async function printWarningsAndErrorsToConsoleAndAddToResult(
323-
context: BuilderContext,
324-
executionResult: ExecutionResult,
325-
warnings: string[],
326-
errors: string[],
327-
): Promise<void> {
328-
const errorMessages = errors.map((text) => ({ text, location: null }));
329-
if (errorMessages.length) {
330-
executionResult.addErrors(errorMessages);
331-
}
332-
333-
await logMessages(context, {
334-
errors: errorMessages,
335-
warnings: warnings.map((text) => ({ text, location: null })),
336-
});
337-
}

packages/angular_devkit/build_angular/src/tools/esbuild/bundler-execution-result.ts

+27-2
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export class ExecutionResult {
3838
outputFiles: BuildOutputFile[] = [];
3939
assetFiles: BuildOutputAsset[] = [];
4040
errors: (Message | PartialMessage)[] = [];
41+
warnings: (Message | PartialMessage)[] = [];
4142
externalMetadata?: ExternalResultMetadata;
4243

4344
constructor(
@@ -53,8 +54,32 @@ export class ExecutionResult {
5354
this.assetFiles.push(...assets);
5455
}
5556

56-
addErrors(errors: (Message | PartialMessage)[]): void {
57-
this.errors.push(...errors);
57+
addError(error: PartialMessage | string): void {
58+
if (typeof error === 'string') {
59+
this.errors.push({ text: error, location: null });
60+
} else {
61+
this.errors.push(error);
62+
}
63+
}
64+
65+
addErrors(errors: (PartialMessage | string)[]): void {
66+
for (const error of errors) {
67+
this.addError(error);
68+
}
69+
}
70+
71+
addWarning(error: PartialMessage | string): void {
72+
if (typeof error === 'string') {
73+
this.warnings.push({ text: error, location: null });
74+
} else {
75+
this.warnings.push(error);
76+
}
77+
}
78+
79+
addWarnings(errors: (PartialMessage | string)[]): void {
80+
for (const error of errors) {
81+
this.addWarning(error);
82+
}
5883
}
5984

6085
/**

0 commit comments

Comments
 (0)