docmd 采用模块化插件架构。必需插件随核心包提供,无需安装。可选插件只需一条 CLI 命令即可安装。

安装插件

使用 docmd CLI 安装和移除插件:

# 安装插件
docmd add <插件名称>

# 移除插件
docmd remove <插件名称>

安装程序会自动检测你的包管理器(npm、pnpm、yarn 或 bun),将短名称解析为完整包名,并将插件配置写入 docmd.config.js

使用 --verbose (或 -V) 查看完整安装日志:

docmd add <插件名称> -V

必需插件

这些插件已随 @docmd/core 一起打包——无需安装,在 docmd.config.js 中启用即可:

import { defineConfig } from '@docmd/core';

export default defineConfig({
  plugins: {
    search: {},                        // 离线全文搜索
    seo: { aiBots: false },            // Meta 标签、Open Graph、AI 爬虫控制
    sitemap: {},                       // 自动生成 sitemap.xml
    analytics: {},                     // Google Analytics v4
    llms: {},                          // LLM 上下文生成(llms.txt)
    mermaid: {}                        // 原生交互式图表
  }
});

可选插件

可选插件需要先安装才能启用。

插件 安装命令 说明
PWA docmd add pwa 渐进式 Web 应用支持,含离线缓存
Threads docmd add threads 存储在 Markdown 中的内联讨论评论
Math docmd add math 原生 KaTeX 和 LaTeX 数学公式集成

插件作用域与 noStyle 覆盖

默认情况下,插件在所有页面中全局注入 CSS 和行为。但你可以明确配置,让插件跳过特定页面,或完全禁用对无样式落地页(noStyle: true)的执行。

全局配置范围

通过 docmd.config.js 配置,使插件自动跳过 noStyle 页面:

plugins: {
  math: {
    noStyle: false // math css/js 不再加载到 noStyle 页面
  }
}

页面本地作用域(Frontmatter)

无论全局配置如何,都可以通过 Markdown frontmatter 在单个页面中精确启用或禁用任意插件:

---
noStyle: true
plugins:
  math: true
  threads: false
---

# 仅 Math 在此页面渲染,Threads 被完全屏蔽

插件生命周期

插件可以挂钩到构建与开发过程的不同阶段:

钩子 说明
markdownSetup(md, opts) 使用自定义规则或容器扩展 Markdown 解析器
generateMetaTags(config, page, root) <head> 注入 <meta><link> 标签
generateScripts(config, opts) <head></body> 注入脚本
getAssets(opts) 定义要注入的外部文件或 CDN 脚本
onPostBuild(ctx) 所有 HTML 文件生成完毕后运行逻辑
translations(localeId) 返回指定语言的翻译 UI 字符串
actions 可通过浏览器 WebSocket RPC 调用的服务端处理程序
events 浏览器推送事件的即发即忘处理程序

插件安全性

插件系统提供内置的安全保障:

  • 验证:插件可声明带有 nameversioncapabilitiesplugin 描述符。无效描述符在加载时会被拒绝。
  • 隔离:每个钩子调用都包裹在 try/catch 边界中。故障插件不会导致构建崩溃或影响其他插件。
  • 功能执行:声明了功能的插件只能注册其显式声明的钩子。未声明的钩子会被跳过并输出警告。

详见构建插件获取完整 API 参考。

AI 透明架构 🤖

插件架构设计为确定性。插件注入的每个元标签和脚本均可追踪,让 AI Agent(和人类开发者)能够完全理解站点行为,无隐藏副作用。