From b20cece1745f3ee95a162c0f5455fa6f8a486e57 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Thu, 14 May 2026 10:16:35 -0400 Subject: [PATCH] fix(@angular/build): ignore virtual esbuild paths with (disabled): Virtual files generated by esbuild for disabled browser fields leak into the watch list, causing spurious rebuilds in watch mode. Previously, only paths where the suffix was a Node.js builtin module were ignored. Now, any path containing `(disabled):` is ignored as it represents a virtual file that doesn't exist on disk. Fixes #33160 --- .../build/src/tools/esbuild/bundler-context.ts | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/packages/angular/build/src/tools/esbuild/bundler-context.ts b/packages/angular/build/src/tools/esbuild/bundler-context.ts index 308e3509acdb..968815a52fd5 100644 --- a/packages/angular/build/src/tools/esbuild/bundler-context.ts +++ b/packages/angular/build/src/tools/esbuild/bundler-context.ts @@ -13,12 +13,10 @@ import { BuildResult, Message, Metafile, - OutputFile, build, context, } from 'esbuild'; import assert from 'node:assert'; -import { builtinModules } from 'node:module'; import { basename, extname, join, relative } from 'node:path'; import { SERVER_GENERATED_EXTERNALS } from '../../utils/server-rendering/manifest'; import { @@ -472,12 +470,9 @@ function isInternalBundlerFile(file: string) { return true; } - const DISABLED_BUILTIN = '(disabled):'; - - // Disabled node builtins such as "/some/path/(disabled):fs" - const disabledIndex = file.indexOf(DISABLED_BUILTIN); - if (disabledIndex >= 0) { - return builtinModules.includes(file.slice(disabledIndex + DISABLED_BUILTIN.length)); + // Any (disabled): path is a virtual esbuild entry that doesn't exist on disk + if (file.includes('(disabled):')) { + return true; } return false;