angular / angular/angular-cli

incorrect detection of zoneless app

Đang mở
#30,689 10 bình luận 4 reaction 0 người được giao Xem trên GitHub
angular/build:application area: @angular/build freq1: low severity3: broken type: bug/fix
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

Mở 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

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.