From 68bc0c7bc1dfe4f9da8ec0b77bdc9bb4f4dbe196 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Wed, 8 May 2019 21:06:02 -0400 Subject: [PATCH] fix(@angular-devkit/build-angular): extract i18n should only show warnings/errors Fixes #14373 --- .../build_angular/src/extract-i18n/index.ts | 17 +++++++++++++++-- .../test/extract-i18n/works_spec_large.ts | 16 +++++++++++++++- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/packages/angular_devkit/build_angular/src/extract-i18n/index.ts b/packages/angular_devkit/build_angular/src/extract-i18n/index.ts index 813f07cbed4d..1672ff9d47cb 100644 --- a/packages/angular_devkit/build_angular/src/extract-i18n/index.ts +++ b/packages/angular_devkit/build_angular/src/extract-i18n/index.ts @@ -10,7 +10,7 @@ import { createBuilder, targetFromTargetString, } from '@angular-devkit/architect'; -import { runWebpack } from '@angular-devkit/build-webpack'; +import { WebpackLoggingCallback, runWebpack } from '@angular-devkit/build-webpack'; import { JsonObject } from '@angular-devkit/core'; import * as path from 'path'; import * as webpack from 'webpack'; @@ -20,6 +20,7 @@ import { getStatsConfig, getStylesConfig, } from '../angular-cli-files/models/webpack-configs'; +import { statsErrorsToString, statsWarningsToString } from '../angular-cli-files/utilities/stats'; import { Schema as BrowserBuilderOptions } from '../browser/schema'; import { Version } from '../utils/version'; import { generateBrowserWebpackConfigFromContext } from '../utils/webpack-browser-config'; @@ -91,7 +92,19 @@ async function execute(options: ExtractI18nBuilderOptions, context: BuilderConte ], ); - return runWebpack(config[0], context).toPromise(); + const logging: WebpackLoggingCallback = (stats, config) => { + const json = stats.toJson({ errors: true, warnings: true }); + + if (stats.hasWarnings()) { + context.logger.warn(statsWarningsToString(json, config.stats)); + } + + if (stats.hasErrors()) { + context.logger.error(statsErrorsToString(json, config.stats)); + } + }; + + return runWebpack(config[0], context, { logging }).toPromise(); } export default createBuilder(execute); diff --git a/packages/angular_devkit/build_angular/test/extract-i18n/works_spec_large.ts b/packages/angular_devkit/build_angular/test/extract-i18n/works_spec_large.ts index 798c38354275..f22e39932655 100644 --- a/packages/angular_devkit/build_angular/test/extract-i18n/works_spec_large.ts +++ b/packages/angular_devkit/build_angular/test/extract-i18n/works_spec_large.ts @@ -22,7 +22,7 @@ describe('Extract i18n Target', () => { afterEach(() => host.restore().toPromise()); - it('works', async () => { + it('generates an extraction file', async () => { host.appendToFile('src/app/app.component.html', '

i18n test

'); const run = await architect.scheduleTarget(extractI18nTargetSpec); @@ -40,6 +40,20 @@ describe('Extract i18n Target', () => { } }, 30000); + it('does not show full build logs', async () => { + const logger = new TestLogger('i18n'); + host.appendToFile('src/app/app.component.html', '

i18n test

'); + + const run = await architect.scheduleTarget(extractI18nTargetSpec); + + await expectAsync(run.result).toBeResolvedTo(jasmine.objectContaining({ success: true })); + + await run.stop(); + + expect(logger.includes('Chunk Names')).toBe(false); + expect(logger.includes('[emitted]')).toBe(false); + }, 30000); + it('shows errors', async () => { const logger = new TestLogger('i18n-errors'); host.appendToFile('src/app/app.component.html',