`。
- 脚本引用包含 `reveal.js` 或 `reveal.min.js`。
推荐模式:`wrap`。
原因:reveal.js 的价值通常来自 fragments、transition、auto-animate、插件和 notes runtime。`split` 会丢失这些运行时行为。
只有你明确只需要静态页面,才使用 `--mode split`。
## `impress`
命中条件之一:
- HTML 包含 `
`。
- 脚本引用包含 `impress.js`。
推荐模式:`wrap`。
原因:impress.js 的 3D 摄影机、坐标和 step 变换依赖运行时。`split` 会把它降级为静态文档流。
## `inline-deck`
命中条件之一:
- HTML 包含 `
` 和多个 ``。
- HTML 包含 ``,并引用常见 runtime 脚本。
常见来源:html-ppt-skill 或类似 inline HTML deck。
推荐模式:`split`。
每个顶层 `.slide` section 会成为一张独立 slide。打包器会尽量保留 ``、`` attributes 和 head 样式。
## `plain-html`
命中条件:
- 有单个 HTML 入口。
- 不匹配以上任何框架。
推荐模式:`single`。
如果 HTML 中包含脚本,打包器会在 manifest 中声明必要的 `compat.requires`,播放时由 Lite/Pro 请求用户授权。
## Root HTML 查找
当源目录中有多个顶层 HTML 时,按顺序寻找:
1. `index.html`
2. `index.htm`
3. `deck_index.html`
4. `deck_index.htm`
5. `deck.html`
6. `deck.htm`
7. `slides.html`
8. `slide.html`
9. `presentation.html`
如果仍无法确定入口,返回 `ambiguous`,需要用户指定或重命名入口。
## 模式取舍
| 源类型 | 默认模式 | 主要原因 |
| --- | --- | --- |
| `.stage` | `passthrough` | 保持已有格式和 manifest。 |
| huashu webcomponent | `split` | 每张 deck-slide 可独立成为 slide。 |
| huashu router | `split` | 路由清单已经提供 slide 文件。 |
| reveal.js | `wrap` | 保留 reveal runtime。 |
| impress.js | `wrap` | 保留 3D 运行时。 |
| inline deck | `split` | 结构天然按 section 拆分。 |
| plain HTML | `single` | 没有 deck 结构。 |
## 常见误判处理
如果 reveal.js deck 被 split 后动画丢失,重新打包并显式使用:
```bash
node scripts/pack_stage.mjs --src ./deck --out ./deck.stage --mode wrap
```
如果目录中多个 HTML 入口导致 ambiguous,优先把主入口命名为 `index.html`。
如果已有 `.stage` 被识别为普通 zip,检查根目录 `manifest.json` 和 `schema` 字段。