Skip to content

RFC-006: Создание документационного сайта ​

Справка: Ознакомьтесь с шаблоном RFC для понимания спецификации RFC.

Резюме ​

Создание документационного сайта YaoXiang для интеграции разрозненной документации, обеспечения поддержки поиска, навигации, многоязычности и переключения версий.

Мотивация ​

Зачем нужна эта функция? ​

Текущая документация разбросана по нескольким каталогам и представлена только через GitHub Readme, что затрудняет новым пользователям поиск нужной информации, отсутствует поиск, а китайская и английская версии документации не синхронизированы.

Текущие проблемы ​

docs/
├── README.md              # Главный индекс (ограниченное содержимое)
├── tutorial/              # Учебные пособия
├── guides/               # Руководства
├── architecture/          # Документация по архитектуре
├── design/               # Документация по дизайну
├── examples/             # Примеры
├── plans/                # Планы реализации
├── implementation/       # Документация по реализации
├── maintenance/          # Документация по сопровождению
└── archived/             # Архив

Проблемы:

  1. Нет единой точки входа, только GitHub Readme
  2. Отсутствует поиск
  3. Нет переключения версий, пользователи могут читать устаревшую документацию
  4. .obsidian смешан с контролем версий

Предложение ​

Основной дизайн ​

┌─────────────────────────────────────────────────────────┐
│                    Фронтенд документационного сайта      │
│  ┌───────────┐ ┌───────────┐ ┌─────────────────────┐   │
│  │ Навбар    │ │ Боковая   │ │ Выпадающее меню     │   │
│  │           │ │ панель    │ │ переключения версий │   │
│  └───────────┘ └───────────┘ └─────────────────────┘   │
└─────────────────────────────────────────────────────────┘
                          │
                          ▼
┌─────────────────────────────────────────────────────────┐
│              VitePress + Starlight                      │
└─────────────────────────────────────────────────────────┘
                          │
                          ▼
┌─────────────────────────────────────────────────────────┐
│              GitHub Pages (хостинг)                     │
└─────────────────────────────────────────────────────────┘

Структура каталогов (основной дизайн) ​

docs/
├── .vitepress/
│   ├── config.mts              # Конфигурация сайта
│   ├── navbar.ts              # Конфигурация навбара
│   └── sidebar/               # Конфигурация боковой панели
│       ├── zh.ts
│       └── en.ts
│
├── public/
│   ├── favicon.ico
│   └── logo.svg
│
├── zh/                        # Китайская документация
│   ├── index.md               # Китайская главная страница
│   ├── getting-started.md
│   ├── tutorial/
│   │   └── README.md
│   ├── reference/
│   │   └── README.md
│   ├── guide/
│   └── contributing.md
│
└── en/                        # Английская документация
    ├── index.md
    └── getting-started.md

Спецификация URL-путей (основной дизайн) ​

СценарийФормат URLОписание
Последняя версия, китайский/zh/getting-started/Перенаправление на последнюю версию
Последняя версия, английский/en/getting-started/Перенаправление на последнюю версию
Указанная версия/v0.5/zh/getting-started/Префикс с номером версии
Главная страница/zh/ или /en/Языковая главная страница

Дизайн переключения версий:

Выпадающее меню переключения версий:
├── v0.6 (latest)
├── v0.5
├── v0.4
└── v0.3

Спецификация версионных путей (ключевое решение, которое сложно изменить впоследствии):

  • Последняя версия: /zh/xxx/ → перенаправление на последнюю версию
  • Указанная версия: /v0.5/zh/xxx/ → фиксированная версия
  • Переключение версий в навбаре: переключение комбинации /v0.5/ и /zh/

Спецификация боковой панели ​

typescript
// docs/.vitepress/sidebar/zh.ts
export default {
  '/zh/tutorial/': [
    {
      text: 'Учебные пособия',
      items: [
        { text: 'Быстрый старт', link: '/zh/getting-started' },
        { text: 'Основы', link: '/zh/tutorial/basics' },
      ],
    },
  ],
  '/zh/reference/': [
    {
      text: 'Справочник',
      items: [{ text: 'Встроенные функции', link: '/zh/reference/builtins' }],
    },
  ],
};

Интеграция CI/CD ​

yaml
# .github/workflows/docs-deploy.yml
name: Deploy Docs

on:
  push:
    branches: [main]
    paths: ['docs/**', '!.obsidian/**']

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      - run: npm ci
        working-directory: docs
      - run: npm run build
      - uses: actions/deploy-pages@v4
        with:
          build_dir: docs/.vitepress/dist

Детальный дизайн ​

Конфигурация навбара ​

typescript
// docs/.vitepress/navbar.ts
export default [
  { text: 'Начало', link: '/zh/getting-started' },
  { text: 'Учебные пособия', link: '/zh/tutorial/' },
  { text: 'Справочник', link: '/zh/reference/' },
  { text: 'Дизайн', link: '/zh/design/' },
  { text: 'GitHub', link: 'https://github.com/yaoxiang-lang/yaoxiang' },
];

Конфигурация сайта ​

typescript
// docs/.vitepress/config.mts
import { defineConfig } from 'vitepress';
import starlight from '@astrojs/starlight';

export default defineConfig({
  title: 'YaoXiang',
  description: 'Язык программирования, ориентированный на будущее',

  locales: {
    root: { label: '中文', lang: 'zh-CN', link: '/zh/' },
    en: { label: 'English', lang: 'en-US', link: '/en/' },
  },

  // Локальный поиск
  plugins: [
    starlight({
      title: 'YaoXiang',
      localSearch: {},
    }),
  ],

  // Ссылка для редактирования
  editLink: {
    pattern: 'https://github.com/yaoxiang-lang/yaoxiang/edit/main/docs/:path',
  },
});

Компромиссы ​

Преимущества ​

  • Профессиональный документационный сайт улучшает имидж проекта
  • Пользователи быстро находят нужную информацию
  • Локальный поиск бесплатен и достаточен
  • Поддержка многоязычности для международного сообщества
  • Переключение версий предотвращает чтение устаревшей документации

Недостатки ​

  • Затраты на сопровождение: требуется поддержка конфигурации сайта
  • Введение технологического стека: Node.js

Альтернативные решения ​

РешениеПочему не выбрано
GitHub WikiПлохой поиск, низкая кастомизация
Только READMEНет поиска, нет навигации
DocusaurusСлишком тяжёлый, медленный старт

Стратегия реализации ​

Разделение на этапы ​

ЭтапСодержаниеСтатус
P0Инициализация конфигурации VitePress + StarlightСделать
P0Настройка структуры каталогов, навбара, боковой панелиСделать
P0Миграция README + Быстрый стартСделать
P0CI/CD автоматическое развёртывание на GitHub PagesСделать
P1Миграция учебных пособий, справочной документацииСделать
P1Настройка меню переключения версийСделать
P2Дополнить английскую документациюСделать

Зависимости ​

Нет внешних RFC зависимостей

Риски ​

РискВлияниеМеры по смягчению
Потеря контентаОчень великоПолная резервная копия перед миграцией

Открытые вопросы ​

Нет - Все решения приняты


Приложения ​

Приложение A: Запись решений по дизайну ​

РешениеРешениеДатаЗаписал
Выбор SSGVitePress + Starlight2025-02-07晨煦
Платформа хостингаGitHub Pages2025-02-07晨煦
Решение для поискаЛокальный поиск2025-02-07晨煦
Структура многоязычностиПрефиксы /zh/ и /en/2025-02-07晨煦
Версионные путиФормат /v0.5/zh/2025-02-07晨煦

Ссылки ​