You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
dev-server: es2016 prebundle target for zone.js apps lowers private fields and breaks dependencies #34280
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.
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.
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)
Activity
alan-agius4 commentedon Oct 13, 2026
Closing this issue because the underlying cause originates from an upstream dependency.