SlideStage Pro · lite-pro-package-boundary
Lite 与 Pro 的包边界
镜像文档保留源仓库使用的语言。站内 chrome 仍按你选的语言显示。
SlideStage Lite 是 .stage 运行时和共享包的来源。SlideStage Pro 是自托管团队平台。两者共享格式和播放能力,但代码边界必须保持清晰。
一句话原则:Pro 消费 Lite 发布的包,Lite 不知道 Pro 存在。
为什么需要边界
如果 Pro 直接引用 Lite 源码,或者在 Pro 中复制 Lite 的 loader/schema,会出现三个问题:
.stage格式漂移:同一份 deck 在 Lite 和 Pro 中校验结果不同。- 下游补丁堆积:Pro 的临时修复无法自然回到 Lite。
- 版本分支扩散:
isPro、VITE_APP_EDITION这类判断会污染 Lite。
边界的目标是让 Lite 可以作为独立产品发布,同时让 Pro 稳定复用它。
允许的依赖方向
Pro 可以依赖这些已发布包:
@slidestage/core@slidestage/ui@slidestage/lite-preset@slidestage/brand@slidestage/spec
这些依赖应通过 semver 从 npm registry 安装。
禁止的做法
Pro 不应提交:
file:../SlideStageLite/...link:../SlideStageLite/...- 从 Lite checkout 的深层相对 import。
- 在 Pro 中重新声明
manifestSchema。 - 在 Pro 中复制
loadDeck或路径安全逻辑。 isPro或VITE_APP_EDITION这类 edition branching。
如果需要本地联调,可以使用临时 pnpm link 或 yalc 工作流,但不能把这些设置提交进仓库。
Pro 如何扩展
Pro-only 行为应该放在 Pro 自己的包中,例如:
packages/pro-presetpackages/pro-sharedapps/apiapps/web
浏览器端功能通过插件或 preset 装配。服务端功能通过 API、数据库和存储层实现。
Lite 不应为了 Pro 加条件分支。需要共享的新能力,应先在 Lite/Core/Spec 中设计为通用扩展点,再由 Pro 消费新版本。
.stage 契约归属
.stage 格式由 @slidestage/spec 定义。
这意味着:
- Manifest 字段变更先从 spec 开始。
- Loader 和路径安全逻辑通过
@slidestage/core消费。 - Pack、Lite、Pro 都应对同一份
.stage给出一致结果。
Pro 上传 pipeline 应使用 Lite/Core 的能力,而不是自己写一套 zip/manifest 规则。
品牌资产归属
品牌资产和产品 registry 由 @slidestage/brand 维护。
Pro 可以在构建时把品牌资产同步到自己的 public 目录,但同步结果应是生成物或忽略文件,不应复制一份新的品牌源文件。
什么时候改 Lite
如果 Pro 需要一个能力,而这个能力对 .stage 格式、播放器、converter 或共享 UI 也有意义,应优先在 Lite 侧提出。
例子:
- 新 manifest 可选字段。
- 新 trust capability。
- 新 loader error code。
- 新 converter source kind。
- 新可复用 viewer UI primitive。
改完 Lite 并发布包后,Pro 再通过 semver 升级使用。
检查清单
提交 Pro 改动前,确认:
- 没有
file:或link:指向 Lite。 - 没有从
../SlideStageLiteimport。 - API 层没有 import React。
- Web 层没有 import Prisma、Hono 或 Node 文件系统模块。
.stage校验来自@slidestage/core/@slidestage/spec。- Pro-only 能力位于 Pro 包或 Pro apps。