@defer doesn't lazy-load an imports entry written as forwardRef(() => X)
Maintainer thường phản hồi trong vòng 1 ngày
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 35/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- rust, typescript
- Lĩnh vực
- compilers
Hướng nghiên cứu
Start in compile_component_full and inspect the implicit-deferral gate and identifier matching for @Component.imports; compare how ngtsc resolves forwardRef through forwardRefResolver. Run the ngtsc defer_spec.ts case “should lazy-load dependency referenced with a fowardRef” against oxc with cross-file analysis enabled and resolveImportedValues: true. Done means the generated output uses a defer dependency function with a dynamic import and no static CmpA import; an open pull request (#640) is already linked.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Summary
A standalone component listed in @Component.imports through forwardRef(() => X) and used only inside @defer is not lazy-loaded: the static import stays and ɵɵdefer gets no dependency function, so the component ships in the main chunk. A plain imports: [X] entry is deferred correctly (#313). Found by running Angular's ngtsc spec defer_spec.ts: "should lazy-load dependency referenced with a fowrardRef" against oxc (cross-file analysis on, resolveImportedValues: true).
Reproduction
// cmp-a.ts
import {Component} from '@angular/core';
@Component({selector: 'cmp-a', template: 'CmpA!'})
export class CmpA {}
// test.ts
import {Component, forwardRef} from '@angular/core';
import {CmpA} from './cmp-a';
@Component({
selector: 'test-cmp',
imports: [forwardRef(() => CmpA)],
template: `@defer { <cmp-a /> }`,
})
export class TestCmp {}
Actual
import { CmpA } from './cmp-a';
...
i0.ɵɵdefer(1, 0);
...
dependencies: i0.ɵɵgetComponentDepsFactory(TestCmp, [forwardRef(() => CmpA)])
Expected (ngc)
const TestCmp_Defer_1_DepsFn = () => [import("./cmp-a").then(m => m.CmpA)];
...
i0.ɵɵdefer(1, 0, TestCmp_Defer_1_DepsFn);
and no import { CmpA }.
Cause
The implicit-deferral gate in compile_component_full only runs when every imports entry is a bare identifier, and the identifier list it matches against skips forwardRef(...) entries; ngtsc resolves them through forwardRefResolver first.
- Ngôn ngữ chính
- Rust
- Star
- 244
- Fork
- 26
- Merge trung bình
- 23 giờ 41 phút
- Pull request đã merge (30 ngày)
- 106
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của voidzero-dev/oxc-angular-compiler
-
Partial mode: NgModule-declared components get no dependencies, so their directives never matchĐang mở
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
voidzero-dev/oxc-angular-compiler#655 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
voidzero-dev/oxc-angular-compiler#654 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Constructor param typed by a same-file interface is injected as a token (ReferenceError at runtime)Đang mở
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 73/100
voidzero-dev/oxc-angular-compiler#653 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 28/100
voidzero-dev/oxc-angular-compiler#623 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Support useDefineForClassFields: false (Class Field Lowering)Có thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mở
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
voidzero-dev/oxc-angular-compiler#73 · 11 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của voidzero-dev/oxc-angular-compiler
Issue tương tự
-
good first issue help wanted r-docs
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
servo/rust-smallvec#824 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 83/100
Maintainer thường phản hồi trong vòng 1 ngày
-
priority middle
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 62/100
KATO-Hiro/AtCoderClans#12940 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 83/100
Maintainer thường phản hồi trong vòng 1 ngày
-
o8 next debug build aborts on Glass to Dark appearance switch (nil identifier messaged before check)Đang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
hurttlocker/o8#5112 ·