incorrect detection of zoneless app
- Ngôn ngữ chính
- TypeScript
- Star
- 27k
- Fork
- 11.8k
- Merge trung bình
- 14 giờ 23 phút
- Pull request đã merge (30 ngày)
- 162
Mô tả
### 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.
Hướng dẫn đóng góp
Hướng nghiên cứu
Bắt đầu tại packages/angular/build/src/tools/esbuild/utils.ts ở các dòng 469-478, sau đó chạy lệnh build với một tệp JavaScript hoặc TypeScript trong mảng polyfills khi zone.js không khả dụng. Hoàn tất khi một ứng dụng zoneless không bị phát hiện sai là non-zoneless và polyfill dựa trên tệp vẫn hoạt động.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- angular, typescript
- Lĩnh vực
- build-system, cli
- Loại issue
- Lỗi
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 52/100