Skip to content

Cesium 升级清单 + 回归矩阵

面向 @nexa/gis-cesium 的 Cesium 版本升级专用流程与回归基线。 通用依赖变更流程见 dependency-checklist.md;本文聚焦 Cesium 私有 API 兼容面与版本敏感能力。

当前锁定版本(2026-08 实测)

声明解析版本说明
cesium^1.133.11.133.1peer + dev,SDK 不直接打包
@cesium/engine传递20.0.1Cesium 运行时核心
@cesium/widgets传递13.1.1Viewer/Timeline 等控件
dayjs^1.11.191.11.19时间工具
satellite.js^6.0.26.0.2TLE 轨道计算
cesium-heatmap-es6^0.8.00.8.0热力图
@turf/turf^7.3.57.3.5地理计算
ol^10.10.010.10.0peer + dev,Overlay 混用
vue^3.5.213.5.21peer + dev,宿主全局集成

私有 API 表面矩阵

SDK 通过私有/内部 API 访问 Cesium 的具体点。升级前逐项核对,升级后逐项回归。

#家族成员位置状态
Material._materialCachegetMaterial / addMaterial / Material[type+'Type'] 静态量core/cesium-compat/materialCache.ts 适配层 + 6 个消费文件✅ 适配层收口(P2-A W1)
Property 静态量isConstant / equals / getValueOrClonedDefault / createPropertyDescriptorviewerToolMixin.ts Material1 4 处✅ 已迁移 propertyUtils + shim createPropertyDescriptor(P2-B1)
TimelinecurrentTime / makeLabelviewerToolMixin.ts / viewerScenarioConfigMixin.ts✅ 类型 shim(P2-A W2)
ClockViewModelViewer._clockViewModelviewerAnimationPanelMixin.ts 5 处✅ 类型 shim(P2-A W2)
Scene 内部~18 处引擎内部字段/构造viewerOffscreenRenderMixin.ts 5 / createFrameBuffer.ts 2 等✅ shim 具型精化完成(P2-B1):any → 具型形状,_hdr 以公开 highDynamicRange 替换,冗余强转清零
Framebuffer/Texture 构造器new Framebuffer(...) / new Texture(...)createFrameBuffer.ts✅ 构造器已入 shim(P2-B1),冒烟覆盖(c)
Camera 静态量DEFAULT_VIEW_RECTANGLE / FACTORAirViewer.ts 保存/还原守卫 + viewerScenarioConfigMixin.ts✅ AirViewer 构造时快照、destroy 时还原(P2-B2);dts 安全;销毁协议冒烟(f)
Model_runtimeNodeviewerNodeToTransformMixin.ts待 P2-B2(普通 as 断言,0 grep,无公开替代)
Entity._type / Viewer._element各处已局部 shim / 不计入 grep

此外 core/host.tsgetHostCesium/getHostVue/getHostEcharts/getHostOl 收口的宿主库 UMD 全局强转(echarts/ol 各 1 处)保留——它们面向宿主集成点,不是 Cesium 私有 API。

grep 回归门禁

私有 API 访问点计数快照,只许下降、不许反弹

bash
grep -rn "as unknown as\|@ts-expect-error\|@ts-ignore" packages/gis-cesium/src/lib | wc -l
阶段计数
P1 基线59
P2-A 完成(适配层 + 类型 shim)38
P2-B1 完成(Scene shim 精化 + Property 静态量迁移)26
P2-B2 完成(viewer 销毁协议 + 资源单例统一 + 散点收口)24
P3 前只降不升

版本敏感能力 → 回归覆盖映射

能力依赖的私有/内部面自动化覆盖升级时人工检查
自定义材质注册Material._materialCache冒烟 a:getMaterial('PolylineTrail'/'RadarWave'/'RadarWaveGradient') truthy材质视觉无回归
MaterialProperty/fromType_materialCache + fabric 结构冒烟 b:new FlowingPolylineMaterialProperty() + fromType 非空三类连接线正常
离屏渲染/FBOFramebuffer/Texture 构造器冒烟 c:viewerOffscreenRenderMixin + createFrameBuffer + renderToCanvas no-throw离屏示例清晰
相机飞行Camera API冒烟 d:camera.flyTo no-throw各 flyTo 示例正常
Material1 + TLE 轨道window.Cesium.Material1 宿主全局冒烟 e:viewerToolsMixinMaterial1 定义 + tleSatelliteTrack 建实体TLE 轨道示例正常
时间控件Timeline / _clockViewModel单测(shim 编译保证)动画面板交互正常
viewer 销毁协议Camera 静态量 + mixin uninstall 钩子冒烟 f:extend 注册钩子 → destroy → 钩子执行 + Camera.DEFAULT_VIEW_RECTANGLE 同一性还原各 mixin destroy 后无残留监听 / primitive

冒烟套件:pnpm --filter @nexa/gis-cesium run test:e2e(Playwright 无头 Chromium,见 [P2-A 实现])。

升级 SOP(顺序执行)

bash
# 1. 依赖变更(含 lockfile diff 审阅 @cesium/engine / @cesium/widgets 透传)
pnpm add cesium@<new> --filter @nexa/gis-cesium

# 2. 双包类型检查(关键:残留未使用 @ts-expect-error 会在此暴露)
pnpm --filter @nexa/gis-cesium run typecheck
pnpm --filter @nexa/scenario-data run typecheck

# 3. 单元测试 + 库构建
pnpm --filter @nexa/gis-cesium run test
pnpm --filter @nexa/gis-cesium run build:lib

# 4. 全仓 lint(0 error 门禁)
pnpm exec eslint . --ignore-pattern "**/dist-app/**"

# 5. grep 快照(必须 ≤ 38 且不反弹)
grep -rn "as unknown as\|@ts-expect-error\|@ts-ignore" packages/gis-cesium/src/lib | wc -l

# 6. 浏览器冒烟(真实 Viewer + WebGL)
pnpm --filter @nexa/gis-cesium run test:e2e

# 6b. 裸 viewer 消费者销毁提醒:经 destroyViewer(viewer) 触发 mixin 的 uninstall 钩子,
#     勿 monkey-patch Cesium.Viewer.destroy(SDK 不覆盖原生销毁路径,见架构文档「viewer 销毁协议」)

# 7. 更新本文档:锁定版本表、私有 API 矩阵状态、grep 快照

升级后 shim 清理

Cesium 升级若上游 .d.ts 已声明 shim 成员,须删除对应 shim 文件中的同名增强(否则重复成员冲突)。两处 shim 分工:

packages/gis-cesium/src/lib/cesium.d.ts(Viewer extensions + _clockViewModel/Timeline,P2-A):

  • Viewer._clockViewModel(私有 shim,JSDoc 已标注)
  • Timeline.currentTime / makeLabel

packages/gis-cesium/src/types/cesium-internal.d.ts(Scene 内部面 + 构造器/静态量,P2-B1):

  • Scene._defaultView / _view / _frameState / _shadowMapCamera / _computeCommandList / _overlayCommandList / context / updateFrameState / updateAndExecuteCommands / resolveFramebuffers
  • PostProcessStageCollection.hasSelected / Fog.update(interface 增强,公开类已有成员会静默忽略)
  • Framebuffer / Texture 构造器 + createPropertyDescriptor + Cesium3DTilePass 命名空间(运行时公开、dts 未声明)
  • 逐项对照上游 CHANGES.md 是否公开了这些成员