PageDocument
PageDocument 是页面结构快照。它只存结构,不存组件源码字典。
基本形态
ts
interface PageDocument {
schemaVersion?: '1'
layout: CanvasLayoutConfig
instances: PageInstance[]
bindings: PageBinding[]
componentOverrides?: Record<string, PageComponentOverride>
}instances
instances 是页面上的组件实例列表。
每个实例至少需要:
instanceIdcomponentIdcomponentVersionKeylayoutBox
嵌套容器场景还会用:
parentIdslotplacementlayoutItemcontainerLayout
componentVersions 不在 PageDocument 内
组件源码由运行 payload 单独传:
ts
interface PageRenderPayload {
document: PageDocument
componentVersions: Record<string, ComponentVersionAsset>
}这样做是为了避免 50 个实例重复携带同一份组件源码。
componentOverrides
页面级实例代码覆盖按 instanceId 存。
它解决的问题是:只改当前页面里某一个组件实例,不影响组件库正式版本,也不影响其它页面。
ts
componentOverrides: {
timer_1: {
instanceId: 'timer_1',
baseVersionKey: 'timer@v3',
source,
contract,
},
}如果实例已经升级到 timer@v4,但 override 仍基于 timer@v3,它就是 stale override。运行时不消费 stale override,宿主应该提示用户处理。