incorrect detection of zoneless app
- 主要言語
- TypeScript
- スター
- 27k
- フォーク
- 11.8k
- 平均マージ
- 14時間 23分
- マージ済み PR(30日)
- 162
説明
### Command
build
### 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
_No response_
### Description
Including any js/ts file in the polyfills array causes the angular server to incorrectly identify the app as a non-zoneless app. Thus it tries to include zone.js, which is deleted, because I uninstall the package as per the guide.
### Minimal Reproduction
-
### Exception or Error
```text
```
### Your Environment
```text
Angular CLI: 20.1.0
Node: 22.14.0
Package Manager: pnpm 10.13.1
OS: linux x64
Angular: 20.1.0
... animations, build, cdk, cli, common, compiler, compiler-cli
... core, forms, language-service, material
... material-luxon-adapter, platform-browser
... platform-browser-dynamic, platform-server, router, ssr
Package Version
---------------------------------------------------------
@angular-devkit/architect 0.2001.0
@angular-devkit/build-angular 20.1.0
@angular-devkit/core 20.1.0
@angular-devkit/schematics 20.1.0
@schematics/angular 20.0.6
ng-packagr 20.0.1
rxjs 7.8.1
typescript 5.8.3
```
### Anything else relevant?
##### TLDR
This is essentially a re-open of #28898. Developers are forced to avoid adding any js/ts file to the polyfills array. Instead, they have to create js scripts inline inside index.html, or write js files, and include them as assets with index.html
---
The problem is within these lines:
https://github.com/angular/angular-cli/blob/2c3a46b9ecf69049fbddb2c912636d9d62e197df/packages/angular/build/src/tools/esbuild/utils.ts#L469-L478
The presence of *any* js/ts file in the polyfills array causes zone to be included, even though I uninstalled zone.js and do everything zone-less-ly.
I had a file called `polyfill-buffer.ts` which I used to add to the polyfill array:
```ts
import { Buffer } from 'buffer';
if (!globalThis.Buffer) {
Object.assign(globalThis, { Buffer });
}
```
Now I have to add it to index.html as a script
```js
import { Buffer } from 'https://cdn.jsdelivr.net/npm/buffer/+esm';
if (!globalThis.Buffer) {
Object.assign(globalThis, { Buffer });
}
```
This is maintainable for small scripts like these. But it eliminates the possibility of using any file-based polyfill stuff.
コントリビューションガイド
調査の方向性
packages/angular/build/src/tools/esbuild/utils.ts の469-478行目から始め、次に polyfills 配列に JavaScript または TypeScript ファイルを指定し、zone.js が利用できない状態で build コマンドを実行します。zoneless アプリが誤って non-zoneless と検出されず、ファイルベースの polyfill が引き続き機能すれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- angular, typescript
- 領域
- build-system, cli
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 静か
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 52/100