Hacktoberfest 2026:維護者為十月標記出來的 issue,仍然開放、適合新手。 瀏覽 Hacktoberfest issue

@defer doesn't lazy-load an imports entry written as forwardRef(() => X)

未關閉
#632 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

維護者通常 1 天內回覆

@edbzn 已經在處理了。

開始於 2026年10月25日。

  • #640 來自 @edbzn —— 未關閉

評估

難度
4/5
預估耗時
3-5 天
新手友好度
35/100
Issue 類型
缺陷
描述清晰度
描述清楚
活躍度
停滯
技術堆疊
rust, typescript
領域
compilers

研究方向

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.

由索引模型根據 Issue 內容生成。

描述

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.

主要語言
Rust
星號
244
分支
26
平均合併
23 小時 16 分鐘
30 天內合併 PR
96

環境準備

這個專案沒有提供開發容器、Dockerfile 或貢獻指南,環境需要你自己搭建:先看它的 README,通用步驟見我們的新手貢獻指南。

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

voidzero-dev/oxc-angular-compiler 的其他 Issue

查看 voidzero-dev/oxc-angular-compiler 的全部 Issue

相似的 Issue

更多 Rust Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。