docmd 0.7.8 版本引入了 Git 插件用于仓库感知元数据,全新重新设计的终端界面提供实时进度反馈,并行页面处理显著加速构建,官方插件自动安装,以及容器语法兼容性方便从其他文档引擎迁移的用户。
重点更新
构建引擎 — 并行处理
页面渲染管线已从顺序处理重新设计为批量并行处理,为各种规模的文档站点带来显著加速。
变更内容:
- 批量文件 I/O:文件现在通过
Promise.all一次读取 64 个、一次写入 128 个,而非逐个顺序处理 - 管线重叠:文件读取、Markdown 解析和 HTML 写入阶段现在跨批次重叠进行
- 并行写入:所有渲染的 HTML 文件批量并发写入磁盘
预计性能(简单页面):
| 规模 | 之前 (0.7.7) | 之后 (0.7.8) | 提升 |
|---|---|---|---|
| ~1,000 页面 | ~22秒 | ~12秒 | 快约45% |
| ~10,000 页面 | ~4分钟+ | ~1.5分钟 | 快约60% |
| 文件读取阶段 | 顺序 | 64文件批次 | 64倍并发 |
| 文件写入阶段 | 顺序 | 128文件批次 | 128倍并发 |
| 进度反馈 | 无(静默) | 实时进度条 | 实时 |
性能改进随文档规模增长而增强。拥有大量 I/O 的大型站点(1,000+ 页面)从批量并行处理中受益最大。
终端界面 — 统一 TUI
所有终端输出已重新设计为统一的高信号设计系统,在所有命令间共享。不再有静默等待、不一致的格式或杂乱的多行输出。
新 TUI 组件:
| 功能 | 描述 |
|---|---|
| 进度条 | ━━━━━━━━━━━━───────── 42/100 (42%) — 单行,原地更新 |
| 旋转器 | ⠋ ⠙ ⠹ — 长时间操作期间的盲文点动画 |
| 计时器 | 每次构建、重建和项目都显示耗时 |
| 分区 | 所有命令统一使用 ┌─ 分区 / └── 框架 |
所有命令统一输出:
┌─ Build
│ Source docs/
│ Output site/
│ Versions 2 (v06, v07)
│ Locales 4 (en, hi, zh, fr)
│ Processing pages ━━━━━━━━━━━━━━━━━━━━ 419/419 (100%)
└──────────────────────────────────────────────────────────
┌─ Post-Build Tasks
│ Search index [ DONE ]
│ Sitemap [ DONE ]
└──────────────────────────────────────────────────────────
⬢ Build complete. Generated 238 pages in 1.4s.
统一的命令:
docmd build— 显示来源/输出/版本/语言的分区头,进度条,计时docmd dev— 初始构建和重建时的动画旋转器,每次重建计时- 多项目构建 — 每个项目旋转器动画,每个项目计时,总结概览
docmd live— 与所有其他命令一致的分区框架
Git 插件
新的 Git 插件为您的文档页面带来仓库感知元数据——最后更新时间戳、提交历史工具提示和编辑链接——全部直接从您的 Git 历史中获取,无需配置。
// 配置编辑链接
plugins: {
git: {
repo: 'https://github.com/your-org/docs',
branch: 'main'
}
}
功能:
- 最后更新时间戳:显示每个页面的最后修改时间,近期更改使用相对时间格式
- 提交历史工具提示:悬停可查看近期提交,包含作者姓名和提交信息
- 编辑链接:自动为 GitHub、GitLab 和 Bitbucket 构建"编辑此页面"链接
- 优雅降级:如果项目不在 Git 仓库中,会自动禁用
该插件取代了旧的 editLink 配置选项,提供更丰富的功能。详见 Git 插件文档。
官方插件自动安装
在 docmd.config.js 中列出的官方插件如果缺失,现在会自动安装。当您在配置中添加一个未安装的插件时,docmd 会在下次构建时从 npm 下载。
// docmd.config.js
plugins: {
pwa: {}, // 未安装?docmd 自动安装
threads: {} // 同上
}
安全特性:
- 仅适用于注册表中的官方
@docmd/plugin-*包 - 安装与您的
@docmd/core版本匹配的精确版本 - 使用您项目的包管理器(npm、pnpm、yarn 或 bun)
- 在终端中显示进度
容器语法兼容性
从 VitePress、Docusaurus 或类似文档引擎迁移的用户现在可以直接使用熟悉的容器语法。
VitePress 风格容器现已支持:
:::tip
这将渲染为提示提醒。
:::
:::warning
这将渲染为警告提醒。
:::
:::details 点击展开
这将渲染为可折叠区域。
:::
Docusaurus 风格容器现已支持:
:::note
这将渲染为信息提醒。
:::
:::caution
这将渲染为警告提醒。
:::
此外,所有容器现在支持无空格语法:
:::callout info
与 ::: callout info 效果相同
:::
:::tabs
与 ::: tabs 效果相同
:::
这使得从其他引擎迁移文档时只需最少的更改。
迁移友好别名
| 别名 | 映射到 | 来源 |
|---|---|---|
:::tip |
callout tip |
VitePress |
:::warning |
callout warning |
VitePress |
:::danger |
callout danger |
VitePress |
:::info |
callout info |
VitePress |
:::details |
collapsible |
VitePress |
:::note |
callout info |
Docusaurus |
:::caution |
callout warning |
Docusaurus |
这些别名与标准 docmd 语法同时工作。您现有的文档继续正常运行,而从其他引擎导入的内容也能正确渲染。
内部改进
英式英语标准化
文档已更新为在全文中一致使用英式英语拼写。这包括 “optimised”、“centralised”、“localisation” 和 “colour” 等术语。
代码质量
- 在文档和代码注释中将长破折号替换为标准连字符以提高可读性
- 标准化源文件中的注释格式
- 改进了插件 API 的 TypeScript 类型定义
完整变更日志
功能
- Git 插件(核心):新的核心插件,提供最后更新时间戳、提交历史和编辑链接,支持优雅降级
- 自动安装:配置中的官方插件如果缺失会自动安装
- 容器别名:VitePress 和 Docusaurus 容器语法现在开箱即用
- 无空格容器:所有容器现在接受
:::后有或无空格的语法 - 并行处理:批量文件 I/O,64文件读取和128文件写入并发
- 统一 TUI:进度条、旋转器、计时器和所有命令的一致分区输出
改进
- 构建性能:大型站点通过并行 I/O 批处理构建速度提升最高约60%
- 实时进度:页面处理期间的实时进度条
- 动画旋转器:构建、重建和多项目处理期间的视觉反馈
- 构建计时:每个操作报告耗时
- Git 小部件 UI:工具提示使用 CSS
:hover/:focus-within实现流畅无抖动显示 - 代码块样式:
docmd-code-block-wrapper现在使用通用--shadow-sm变量 - 实时编辑器 TUI:统一的分区框架和优雅关闭
- 文档:英式英语拼写标准化
- 代码风格:整个代码库的一致格式化
- 插件注册表:Git 插件已添加到官方注册表
弃用
- editLink 配置:独立的
editLink配置选项已弃用,改用 Git 插件
迁移指南
采用 Git 插件
如果您之前使用 editLink 配置,请替换为 git 插件。新方式更智能——它会自动检测您的 git 仓库根目录并计算正确的文件路径,无需在 URL 中硬编码目录。
之前(已弃用):
export default defineConfig({
editLink: {
enabled: true,
baseUrl: 'https://github.com/org/repo/edit/main/docs' // ← 硬编码目录
}
});
之后:
export default defineConfig({
plugins: {
git: {
repo: 'https://github.com/org/repo', // ← 只需仓库地址,无需路径
branch: 'main'
}
}
});
插件会自动解析相对于 git 根目录的正确文件路径。这意味着在 monorepo 和多项目设置中,编辑链接无需任何手动路径配置即可正确工作。
附加选项:
| 选项 | 默认值 | 描述 |
|---|---|---|
repo |
— | 仓库 URL(任意提供商) |
branch |
'main' |
链接到的分支 |
editPath |
'edit' |
编辑页面的 URL 段。GitLab 使用 '-/edit',Bitbucket 使用 'src' |
editLink |
true |
设为 false 可禁用编辑链接 |
editLinkText |
i18n 字符串 | 编辑链接的自定义标签 |
如果您之前在 editLink.baseUrl 中使用了硬编码的子目录(例如 .../edit/main/docs),该目录段现在会自动计算。切换到 git 插件时,需要从 URL 中移除子目录——repo 值只需使用 https://github.com/org/repo。
从其他引擎迁移的用户
如果您从 VitePress、Docusaurus 或类似引擎导入文档:
- 您现有的
:::tip、:::warning、:::note容器将正确渲染 - 无空格语法如
:::tabs与标准::: tabs并行工作 - 无需更改您的 Markdown 文件
我们建议在新内容中逐步过渡到标准 docmd 语法(::: callout tip),因为它提供更多标题和图标的灵活性。