From e0285b3ee93ddd50bbe0e4eb18b8cfdcc5a07486 Mon Sep 17 00:00:00 2001 From: Aukevanoost Date: Thu, 14 May 2026 07:34:39 +0200 Subject: [PATCH 1/2] fix: Watcher was accidentally enabled in devmode --- .../angular/src/builders/build/builder.ts | 26 +++++++++---------- .../angular/src/builders/build/schema.d.ts | 2 +- .../angular/src/builders/build/schema.json | 3 +-- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/packages/angular/src/builders/build/builder.ts b/packages/angular/src/builders/build/builder.ts index e14d7f7..005e8ea 100644 --- a/packages/angular/src/builders/build/builder.ts +++ b/packages/angular/src/builders/build/builder.ts @@ -130,13 +130,13 @@ export async function* runBuilder( /** * Explicitly defined as devServer or if the target contains "serve" */ - const runServer = + const runViteServer = typeof nfBuilderOptions.devServer !== 'undefined' ? !!nfBuilderOptions.devServer : target.target.includes('serve'); let ngBuilderOptions = (await context.validateOptions( - runServer + runViteServer ? ({ ...targetOptions, port: nfBuilderOptions.port || targetOptions['port'], @@ -147,7 +147,8 @@ export async function* runBuilder( let serverOptions = null; - const watch = nfBuilderOptions.watch; + const watch = nfBuilderOptions.watch ?? ngBuilderOptions.watch ?? runViteServer; + ngBuilderOptions.watch = watch; if (ngBuilderOptions['buildTarget']) { serverOptions = await normalizeOptions( @@ -165,8 +166,6 @@ export async function* runBuilder( ApplicationBuilderOptions; } - ngBuilderOptions.watch = watch; - if (nfBuilderOptions.baseHref) { ngBuilderOptions.baseHref = nfBuilderOptions.baseHref; } @@ -201,7 +200,7 @@ export async function* runBuilder( const i18n = await getI18nConfig(context); - const localeFilter = getLocaleFilter(ngBuilderOptions, runServer); + const localeFilter = getLocaleFilter(ngBuilderOptions, runViteServer); const sourceLocaleSegment = typeof i18n?.sourceLocale === 'string' @@ -270,7 +269,7 @@ export async function* runBuilder( ngBuilderOptions.externalDependencies = externals; } - const isLocalDevelopment = runServer && nfBuilderOptions.dev; + const isLocalDevelopment = runViteServer && nfBuilderOptions.dev; // Initialize SSE reloader only for local development if (isLocalDevelopment && nfBuilderOptions.buildNotifications?.enable) { @@ -326,8 +325,7 @@ export async function* runBuilder( let first = true; - const nfWatcher: NfFileWatcher | undefined = - nfBuilderOptions.dev || watch ? createNfWatcher() : undefined; + const nfWatcher: NfFileWatcher | undefined = watch ? createNfWatcher() : undefined; if (nfWatcher) { nfWatcher.addPaths(path.dirname(path.resolve(context.workspaceRoot, federationTsConfig))); @@ -369,7 +367,7 @@ export async function* runBuilder( const appBuilderName = '@angular/build:application'; - const builderRun = runServer + const builderRun = runViteServer ? serveWithVite( serverOptions as unknown as Parameters[0], appBuilderName, @@ -403,7 +401,7 @@ export async function* runBuilder( if (!ngBuildStatus.success) { logger.warn('Skipping federation artifacts because Angular build failed.'); buildResult = await builderIterator.next(); - } else if (!first && (nfBuilderOptions.dev || watch)) { + } else if (!first && watch) { const nextOutputPromise = builderIterator.next(); const trackResult = await rebuildQueue.track(async (signal: AbortSignal) => { @@ -527,14 +525,14 @@ function writeFstartScript(nfOptions: NormalizedFederationOptions) { fs.writeFileSync(fstartPath, buffer, 'utf-8'); } -function getLocaleFilter(options: ApplicationBuilderOptions, runServer: boolean) { +function getLocaleFilter(options: ApplicationBuilderOptions, runViteServer: boolean) { let localize = options.localize || false; - if (runServer && Array.isArray(localize) && localize.length > 1) { + if (runViteServer && Array.isArray(localize) && localize.length > 1) { localize = false; } - if (runServer && localize === true) { + if (runViteServer && localize === true) { localize = false; } return localize; diff --git a/packages/angular/src/builders/build/schema.d.ts b/packages/angular/src/builders/build/schema.d.ts index 0d12e56..100bcb4 100644 --- a/packages/angular/src/builders/build/schema.d.ts +++ b/packages/angular/src/builders/build/schema.d.ts @@ -9,7 +9,7 @@ export interface NfBuilderSchema extends JsonObject { port: number; rebuildDelay: number; buildNotifications?: BuildNotificationOptions; - watch: boolean; + watch?: boolean; skipHtmlTransform: boolean; esmsInitOptions: ESMSInitOptions; baseHref?: string; diff --git a/packages/angular/src/builders/build/schema.json b/packages/angular/src/builders/build/schema.json index 2575f60..ba352ff 100644 --- a/packages/angular/src/builders/build/schema.json +++ b/packages/angular/src/builders/build/schema.json @@ -16,8 +16,7 @@ "default": false }, "watch": { - "type": "boolean", - "default": false + "type": "boolean" }, "port": { "type": "number", From e4c12ff5ef0eaac6532462937cd4f9e497308808 Mon Sep 17 00:00:00 2001 From: Aukevanoost Date: Thu, 14 May 2026 09:54:52 +0200 Subject: [PATCH 2/2] fix: Close builder after loop is finished --- packages/angular/src/builders/build/builder.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/angular/src/builders/build/builder.ts b/packages/angular/src/builders/build/builder.ts index 005e8ea..4919e1d 100644 --- a/packages/angular/src/builders/build/builder.ts +++ b/packages/angular/src/builders/build/builder.ts @@ -484,7 +484,8 @@ export async function* runBuilder( if (trackResult.type === 'completed') { if (!trackResult.result.cancelled) { - yield { success: trackResult.result.success }; + ngBuildStatus = { success: trackResult.result.success }; + yield ngBuildStatus; } buildResult = await nextOutputPromise; } else { @@ -503,6 +504,9 @@ export async function* runBuilder( if (isLocalDevelopment) { federationBuildNotifier.stopEventServer(); } + // ref: https://github.com/angular/angular-cli/issues/33201 + // becomes a no-op once Angular fixes the leak upstream. + setTimeout(() => process.exit(ngBuildStatus.success ? 0 : 1), 100).unref(); } yield ngBuildStatus;