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)
  • 在终端中显示进度

容器语法兼容性

VitePressDocusaurus 或类似文档引擎迁移的用户现在可以直接使用熟悉的容器语法。

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 格式

如果您之前在 editLink.baseUrl 中使用了硬编码的子目录(例如 .../edit/main/docs),该目录段现在会自动计算。切换到 git 插件时,需要从 URL 中移除子目录——repo 值只需使用 https://github.com/org/repo

从其他引擎迁移的用户

如果您从 VitePress、Docusaurus 或类似引擎导入文档:

  1. 您现有的 :::tip:::warning:::note 容器将正确渲染
  2. 无空格语法如 :::tabs 与标准 ::: tabs 并行工作
  3. 无需更改您的 Markdown 文件

我们建议在新内容中逐步过渡到标准 docmd 语法(::: callout tip),因为它提供更多标题和图标的灵活性。