Skip to content

Commit 6d10a2d

Browse files
committed
docs(motion): 补 controls 的懒加载使用纪律
1 parent 5ecfe1f commit 6d10a2d

1 file changed

Lines changed: 10 additions & 0 deletions

File tree

‎app/src/motion/controls.ts‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,13 @@
1919
* 只能用 `timeline.getChildren()[0]`(把返回值当 tween 用会让「旧 tween 冻结」一类断言**恒真 = 假绿**);
2020
* ② **绝不可**把 jsdom 的 `performance` 挂到 `globalThis`(`Performance-impl.js:14` 自调用 ⇒ 栈溢出)。
2121
*
22+
* 🔴 **使用纪律(波 C 复制本文件时必须遵守)**:本模块**只许经 `await import()` 到达** —— 它自己静态
23+
* `import { gsap } from "./engine"`(见下面的 import 段),所以**静态** import 本文件的首屏模块会把
24+
* **engine(连同其 `gsap`)拉进首屏静态闭包**,`vendor-gsap` 独立懒 chunk 的承诺(规格 §13 风险表)
25+
* 当场落空。判据 = `engine.guard.test.ts` 的「`app/src/**` 静态 import GSAP 家族的文件集合 ∩ 首屏
26+
* 静态可达闭包 = ∅」(**闭包交集**,不是白名单)—— 今天 `controls.ts` 有 **0 个生产消费点**所以安全,
27+
* 波 C 一旦静态引入,**该守卫会红**(不是静默洞);这条纪律与 `engine.ts` 头注的边界句是同一条。
28+
*
2229
* reduced-motion(§8.5「系统 `prefers-reduced-motion` 优先于档位」):命中时**直接落终态、不建 tween**
2330
* (`tweenCount(target)` = 0),调用方无需分支;`matchMedia` **自带守卫**(尖刺实测 jsdom 30.0.1 没有它
2431
* ⇒ 视为「未 reduce」,不抛)。
@@ -30,6 +37,9 @@
3037
* **传进来的属性名**,读数口由调用方给(`test/motionHarness.ts` 的 `animatedProps` 读 `el.style` 内联集合,
3138
* 看不见类规则里的属性);④ 出口**挡不住**绕过它直接调 tween 的写法 —— 那由属性集合审计与评审兜。
3239
*/
40+
/* 🔴 静态边 ⇒ 本模块因此**只能经 `await import()` 到达**(见文件头「使用纪律」;判据 =
41+
* `engine.guard.test.ts` 的闭包交集)。改成动态 import 会把 `startControllable` 变成 async。
42+
*/
3343
import { gsap } from "./engine";
3444
import type { GsapTimeline } from "./engine";
3545
import { ANIMATABLE_PROPERTIES } from "./shift";

0 commit comments

Comments
 (0)