From 70494824dfea23d69e1d773e2ec91f11f5aa49f8 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Wed, 27 Oct 2021 12:05:30 +0200 Subject: [PATCH] fix(@angular-devkit/build-angular): move `@angular/localize` detection prior to webpack initialization Fail faster if `@angular/localize` is not installed and update the error message since now there is a single extraction mode. --- .../src/builders/extract-i18n/index.ts | 20 +++++++++---------- .../legacy-cli/e2e/tests/i18n/extract-ivy.ts | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/angular_devkit/build_angular/src/builders/extract-i18n/index.ts b/packages/angular_devkit/build_angular/src/builders/extract-i18n/index.ts index d85f0ebbdb..f8085f31fb 100644 --- a/packages/angular_devkit/build_angular/src/builders/extract-i18n/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/extract-i18n/index.ts @@ -156,6 +156,16 @@ export async function execute( throw new Error('The builder requires a target.'); } + try { + require.resolve('@angular/localize'); + } catch { + return { + success: false, + error: `i18n extraction requires the '@angular/localize' package.`, + outputPath: outFile, + }; + } + const metadata = await context.getProjectMetadata(context.target); const i18n = createI18nOptions(metadata); @@ -230,16 +240,6 @@ export async function execute( }, ); - try { - require.resolve('@angular/localize'); - } catch { - return { - success: false, - error: `Ivy extraction requires the '@angular/localize' package.`, - outputPath: outFile, - }; - } - // All the localize usages are setup to first try the ESM entry point then fallback to the deep imports. // This provides interim compatibility while the framework is transitioned to bundled ESM packages. const localizeToolsModule = await loadEsmModule( diff --git a/tests/legacy-cli/e2e/tests/i18n/extract-ivy.ts b/tests/legacy-cli/e2e/tests/i18n/extract-ivy.ts index 8dde1f1bdf..3693481d5e 100644 --- a/tests/legacy-cli/e2e/tests/i18n/extract-ivy.ts +++ b/tests/legacy-cli/e2e/tests/i18n/extract-ivy.ts @@ -14,7 +14,7 @@ export default async function () { // Should fail if `@angular/localize` is missing const { message: message1 } = await expectToFail(() => ng('extract-i18n')); - if (!message1.includes(`Ivy extraction requires the '@angular/localize' package.`)) { + if (!message1.includes(`i18n extraction requires the '@angular/localize' package.`)) { throw new Error('Expected localize package error message when missing'); }