跳轉到

D-20260809-10|Editor 禁止 Barrel 並採責任 Leaf Import

背景與驅動力

Editor 同時包含 browser UI、lazy chunk、Worker 與 Node-only 壓縮葉檔。統一從 src/editor/index.ts barrel 匯入會讓瀏覽器 bundler 解析不屬於該 consumer 的 Node-only dependency,即使實際沒有呼叫也 可能擴大 chunk 或直接建置失敗。

考慮過的選項

  • 保留單一 barrel 並以 lint 強制跨模組使用:入口一致,但會擴大 browser chunk 並混入 Node-only 依賴。
  • 移除 Editor barrel,consumer 按責任 leaf-pick,共享型別下沉到 leaf type module:採納。

決定

Production 與測試 consumer 不得 import src/editor/index.ts;跨模組依責任直接引用 leaf module, 共享型別放入不帶 runtime dependency 的 leaf type module。Import-boundary gate 同時要求 retired barrel 實體不存在、production 與 tests 都沒有 consumer。Browser、Worker 與 Node-only 邊界不得 再由方便入口重新混合。

後果與影響

匯入路徑較長,但每個 consumer 的環境與 chunk 依賴可被靜態驗證。新增 Editor 能力時必須先選擇 責任 leaf 與執行環境;不得以重建 barrel 解決 discoverability,導覽責任留給 canon 與檔案結構。