Agent skill

auto-vitepress

自动为当前项目生成或更新 VitePress 文档网站。

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/auto-vitepress

SKILL.md

自动生成 VitePress 文档

目标

为当前项目在 /docs 目录下创建或更新一个 VitePress 文档网站。此过程应具备智能化,能够处理依赖安装、目录扫描、配置生成和文件创建等任务。

指令

步骤 1: 环境准备

  1. 检查 package.json: 读取项目根目录下的 package.json 文件。如果文件不存在,则新建一个满足 VitePress 需求的依赖配置文件,然后继续执行。
  2. 检查并安装依赖:
    • 分析 package.jsondevDependencies 字段。
    • 检查 vitepressvue 是否已存在。
    • 如果任一依赖缺失,使用 npm install -D vitepress vue 命令进行安装。
  3. 创建目录结构:
    • 检查项目根目录下是否存在 /docs/.vitepress 目录。
    • 如果不存在,请创建它。

步骤 2: 智能扫描与侧边栏生成

  1. 查找并读取 README.md:
    • 在项目根目录查找 README.md 文件。
    • 如果存在,解析其内容作为文档基础结构参考。
    • 分析标题、章节结构和内容,用于构建侧边栏和首页。
  2. 分析项目结构和功能:
    • 根据 README 的内容分析项目的主要功能模块。
    • 识别项目中的核心概念、组件、工具函数等。
    • 根据这些分析结果生成文档结构,而不是直接映射代码文件。
  3. 构建侧边栏对象:
    • 基于 README 的章节结构和项目功能分析来生成侧边栏。
    • 将主要功能模块映射为可折叠的分组,格式为 { text: '功能模块名', collapsed: false, items: [...] }
    • 为每个功能模块创建对应的文档页面链接,格式为 { text: '功能说明', link: '/模块/说明' }
    • 如果 README 中有"快速开始"、"使用方法"、"API 参考"等章节,将它们映射为侧边栏项。
    • 将这个过程的产物构建成一个符合 VitePress sidebar 格式的 JavaScript 数组。

步骤 3: 生成或更新配置文件

  1. 检查 config.js: 检查 /docs/.vitepress/config.js 文件是否存在。
  2. 如果 config.js 不存在:
    • 读取 package.jsonnamedescriptionauthorrepository 字段。
    • package.jsonrepository 字段提取 GitHub 仓库链接(如果存在)。
    • package.jsonauthor 字段提取作者信息(如果存在),用于版权信息。
    • 读取项目根目录的 LICENSE 文件确定许可证类型,如果不存在则默认使用 MIT。
    • 检查项目根目录是否存在 logo 图片或图标(如 logo.pnglogo.svgicon.pngicon.svg 等),如果存在则使用,否则使用 VitePress 官方默认 logo(VPLogo)。
    • 读取 README.md 的内容作为首页的基础内容(如果存在)。
    • 创建一个新的 config.js 文件,内容如下模板所示,并将上一步生成的 sidebar 对象填充进去。
    javascript
    import { defineConfig } from 'vitepress'
    
    export default defineConfig({
      title: '项目名称',
      description: '项目描述',
      themeConfig: {
        // Logo(如果找到图片则设置,否则使用 VitePress 官方默认 logo)
        logo: '/logo 路径.png', // 或不设置此属性使用默认 logo
        // 顶部导航
        nav: [
          { text: '首页', link: '/' },
          { text: '指南', link: '/guide/intro' },
          {
            text: 'GitHub',
            link: 'https://github.com/username/repo'
          }
        ],
        // 侧边栏
        sidebar: [/* 在这里填充侧边栏对象 */],
        // 底部信息
        footer: {
          message: '基于 许可证类型 许可发布',
          copyright: `版权所有 © ${new Date().getFullYear()} 作者名`
        },
        // 显示文档最后更新时间
        lastUpdated: {
          text: '最后更新于',
          formatOptions: {
            dateStyle: 'full',
            timeStyle: 'medium'
          }
        }
      }
    })
    
  3. 如果 config.js 已存在:
    • 读取文件内容。
    • 使用正则表达式或字符串替换的方式,安全地更新 themeConfig 中的 sidebar 字段。注意:只更新 sidebar,不要覆盖用户的其他配置。
    • 如果 themeConfig.nav 不存在,则添加基础的顶部导航配置。
    • 如果 themeConfig.footer 不存在,则添加底部版权信息配置。
    • 如果 themeConfig.lastUpdated 不存在,则添加文档最后更新时间配置。
    • 如果 themeConfig.logo 不存在,则检查项目根目录是否存在 logo 图片或图标,如果存在则设置,否则使用 VitePress 官方默认 logo(VPLogo)。

步骤 4: 创建文档页面和 NPM 脚本

  1. 根据功能生成文档页面:
    • 遍历 sidebar 对象中的所有链接。
    • 对于每一个功能模块链接,检查对应的文件(如 /docs/模块/说明.md)是否存在。
    • 如果不存在,根据 README 的相关内容和项目功能分析来生成文档内容。
    • 文档内容应包含该功能模块的详细说明、使用方法、示例代码等。
    • 而不是简单的占位标题,要生成有实际价值的使用文档。
  2. 创建首页:
    • 检查 /docs/index.md 是否存在。
    • 如果不存在,优先使用 README.md 的内容作为首页内容。
    • 如果 README.md 不存在,则使用 package.jsonnamedescription 生成一个简单的首页。
    • 首页模板如下(注意 hero 区域只包含 nametagline,不包含 text):
    markdown
    ---
    layout: home
    
    hero:
      name: 项目名称
      tagline: 项目描述
      actions:
        - theme: brand
          text: 快速开始
          link: /guide/how-to-use
    
    features:
      - title: 特性 1
        details: 特性 1 的描述
      - title: 特性 2
        details: 特性 2 的描述
    ---
    
  3. 添加 NPM 脚本:
    • 读取 package.json
    • 检查 scripts 字段中是否已存在 docs:devdocs:build
    • 如果不存在,则添加它们:
    json
    "scripts": {
      "docs:dev": "vitepress dev docs",
      "docs:build": "vitepress build docs"
    }
    
    • 将更新后的内容写回 package.json

总结

完成以上所有步骤后,向用户报告任务完成,并提示他们可以通过运行 npm run docs:dev 来启动文档服务器。

Expand your agent's capabilities with these related and highly-rated skills.

Didn't find tool you were looking for?

Be as detailed as possible for better results