dev-server: es2016 prebundle target for zone.js apps lowers private fields and breaks dependencies
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 48/100
- Issue-Typ
- Bug
- Klarheit
- Größtenteils klar
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- angular, babel, node.js, typescript
- Bereich
- build-system
Rechercherichtung
Start by tracing the dev-server dependency prebundle configuration changed in #33772 and how its es2016 target is applied to zone.js apps; the issue does not name the relevant files or tests. Compare the existing Babel linker step and Rolldown target behavior, then run the provided ix-modal reproduction with zone.js. Done when prebundling lowers async/await without lowering unrelated syntax such as private fields, and the modal can be cancelled without the ReferenceError.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Command
serve
Is this a regression?
- Yes, this behavior used to work in the previous version
The previous version in which this bug was not present was
22.0.1
Description
Since #33772 (22.1.4), the dev server prebundles dependencies with an es2016 target for zone.js apps, so async/await gets lowered (#33770). But rolldown can't lower only async/await like esbuild's supported: { 'async-await': false } did. With es2016, it lowers everything newer, including private fields.
That hits an oxc bug: when a static private field is lowered, the helper references the class by name, and if the method has a local with the same name, it reads the local in its TDZ. Minified libraries hit this easily, because the minifier reuses t for both. In our case iX modals can't be closed anymore in ng serve. Production is fine, since it doesn't prebundle and esbuild only lowers async/await.
The oxc bug itself: https://github.com/oxc-project/oxc/issues/27376
I know the actual bug is in oxc, but every zone.js app now runs all its dependencies through a much bigger transform in dev than in production, which is how we ran into it. It'd be great if the prebundle could only lower async/await again. One idea: the prebundle already runs Angular's Babel step for the linker, so @babel/plugin-transform-async-to-generator could do it there and rolldown could keep the real browser targets. I didn't test that though.
Minimal Reproduction
https://github.com/felix-eschey/ix-modal
git clone https://github.com/felix-eschey/ix-modal && cd ix-modal
npm ci
npm run broken # ng serve on http://localhost:4300 with zone.js
Open http://localhost:4300, click "Open modal" and then Cancel. The modal stays open and the console shows the ReferenceError. npm run working is the same app without zone.js and works. npm run excluded keeps zone.js but excludes iX from prebundle and works too.
Exception or Error
ReferenceError: Cannot access 't' before initialization
at t$8.ensureCache (p-BqeSHO6C.js:1:304)
at get mediumTime (p-BqeSHO6C.js:1:1189)
Your Environment
Angular CLI : 22.1.7
Angular : 22.1.6
Node.js : 24.18.0
Package Manager : npm 11.16.0
Operating System : linux x64
@angular/build : 22.1.7
zone.js : 0.15.1
Anything else relevant?
Workaround is prebundle: { exclude: [...] } for the affected packages. iX issue: https://github.com/siemens/ix/issues/2874
- Vorherrschende Sprache
- TypeScript
- Sterne
- 27k
- Forks
- 11.8k
- Ø Merge
- 1 T. 2 Min.
- Gemergte PRs (30 T.)
- 168
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus angular/angular-cli
-
area: @angular/build gemini-triaged
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 74/100
angular/angular-cli#33955 ·
Maintainer antworten meist innerhalb von 1 Tag
-
area: @angular/cli gemini-triaged
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
angular/angular-cli#33055 · 1 Kommentar · 3 Reaktionen ·
Maintainer antworten meist innerhalb von 1 Tag
-
Follow-up to issue: SSR: Add a way to configure externalDependencies for the server bundle onlyOffenarea: @angular/build
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 48/100
angular/angular-cli#34262 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Vite dev server: proxy config normalization reorders glob keys, drops string `context` and misses URLs with a query stringEvtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offenarea: @angular/build
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 65/100
angular/angular-cli#34257 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Add CSP nonce to <link rel="stylesheet"> tags when ngCspNonce is setEvtl. vergeben @alan-agius4 hat das vor 3 Tagen übernommen. Offenarea: @angular/build
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 35/100
angular/angular-cli#34255 ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in angular/angular-cli
Ähnliche Issues
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 82/100
siyuan-note/siyuan#20313 ·
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 92/100
alunduil/projects-v2-sync#14 ·
-
Service process inherits the caller's cwd at first use, holding that folder open on Windows (EBUSY)Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
-
DevTools page styles leak into the host app in developmentEvtl. vergeben @onmax hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
nuxt-modules/better-auth#567 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag