Insights / Технические материалы

От VitePress к Starlight — унификация фреймворков для документационного сайта

Запись миграции бизнес-плана, созданного с помощью VitePress + UnoCSS, на Astro + Starlight с унификацией фреймворка между двумя проектами. Также рассматривается миграция диаграмм Mermaid на CDN.

  • Технологии
  • Astro
  • Starlight
От VitePress к Starlight — унификация фреймворков для документационного сайта
Содержание
  1. Зачем унифицировать фреймворки?
  2. Шаги миграции: VitePress на Starlight
  3. 1. Преобразование структуры проекта
  4. 2. Корректировка frontmatter
  5. 3. Конфигурация astro.config.mjs
  6. 4. Удаление UnoCSS
  7. Миграция диаграмм Mermaid на CDN
  8. Реализация
  9. Преимущества подхода CDN
  10. Результаты миграции
  11. Заключение

Вот пошаговое описание миграции документационного сайта VitePress на Astro + Starlight. Если ваш основной сайт работает на Astro, унификация документации под Starlight упрощает эксплуатацию. Также рассматривается миграция диаграмм Mermaid на CDN.

Зачем унифицировать фреймворки?

Использование различных фреймворков для основного сайта и документационного сайта создаёт следующие проблемы:

  • Удвоенные затраты на обучение: Нужно разбираться и в спецификациях VitePress, и в Astro
  • Рассредоточенные зависимости: Обновления npm-пакетов управляются в двух отдельных системах
  • Несогласованность конфигурации: ESLint, Prettier, настройки деплоя и т.д. поддерживаются независимо

Унификация на Astro + Starlight позволяет делиться паттернами конфигурационных файлов и знаниями по устранению неполадок.

Шаги миграции: VitePress на Starlight

1. Преобразование структуры проекта

VitePress размещает документы в каталоге docs/, а Starlight использует src/content/docs/.

# Before (VitePress)
docs/
  pages/
    index.md
    business-overview.md
    market-analysis.md

# After (Starlight)
src/
  content/
    docs/
      index.md
      business-overview.md
      market-analysis.md

2. Корректировка frontmatter

VitePress и Starlight имеют немного различающиеся форматы frontmatter. Мы мигрировали конфигурацию sidebar VitePress в поле frontmatter sidebar Starlight.

# Starlight frontmatter
---
title: Business Overview
sidebar:
  order: 1
---

3. Конфигурация astro.config.mjs

import { defineConfig } from "astro/config";
import starlight from "@astrojs/starlight";

export default defineConfig({
  integrations: [
    starlight({
      title: "Acecore Business Plan",
      defaultLocale: "ja",
      sidebar: [
        {
          label: "Business Plan",
          autogenerate: { directory: "/" },
        },
      ],
    }),
  ],
});

4. Удаление UnoCSS

В среде VitePress UnoCSS использовался для пользовательских стилей, но Starlight поставляется с достаточными встроенными стилями по умолчанию. Мы удалили uno.config.ts и связанные пакеты, облегчив зависимости.

Миграция диаграмм Mermaid на CDN

В документах бизнес-плана используется Mermaid для блок-схем и организационных диаграмм. В VitePress Mermaid был интегрирован через плагин (vitepress-plugin-mermaid), но такого плагина для Starlight не существует.

Поэтому мы перешли на загрузку Mermaid с CDN на стороне браузера.

Реализация

Добавьте CDN-скрипт Mermaid в пользовательский head Starlight:

// astro.config.mjs
starlight({
  head: [
    {
      tag: "script",
      attrs: { type: "module" },
      content: `
        import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11.16.0/dist/mermaid.esm.min.mjs'
        mermaid.initialize({ startOnLoad: true })
      `,
    },
  ],
});

Стандартный синтаксис Mermaid работает в Markdown как есть:

```mermaid
graph TD
    A[Business Plan] --> B[Market Analysis]
    A --> C[Sales Strategy]
    A --> D[Financial Plan]
```

Преимущества подхода CDN

  • Нулевые зависимости сборки: Mermaid как npm-пакет больше не нужен
  • Всегда актуальная версия: Загружается последняя версия с CDN
  • Не требуется SSR: Рендерится в браузере, поэтому не влияет на время сборки

Результаты миграции

Пункт До После
Фреймворк VitePress 1.x Astro 6 + Starlight
CSS UnoCSS Встроенные стили Starlight
Mermaid vitepress-plugin-mermaid CDN (jsdelivr)
Выходные файлы сборки docs/.vitepress/dist dist
Деплой Cloudflare Pages Cloudflare Pages (без изменений)

Благодаря унификации фреймворков паттерны конфигурации astro.config.mjs и настройки деплоя могут быть общими для нескольких проектов.

Заключение

Унификация фреймворков может не быть «срочной», но чем дольше вы эксплуатируете проекты, тем больше она окупается. Сама миграция с VitePress на Starlight может быть завершена за несколько часов, а подход CDN для Mermaid фактически освобождает от управления плагинами. Если вы ведёте несколько проектов, рассмотрите унификацию технологического стека.

Процесс миграции

  1. Анализ текущего состояния

    Оценка конфигурации VitePress + UnoCSS.

  2. Настройка Starlight

    Реструктуризация проекта с Astro + Starlight.

  3. Миграция контента

    Корректировка расположения Markdown-файлов и frontmatter.

  4. Миграция Mermaid на CDN

    Устранение зависимости от плагина за счёт рендеринга диаграмм через CDN.

До и после миграции

VitePress + UnoCSS

  • SSG на основе Vue
  • Стилизация с помощью UnoCSS
  • Mermaid через плагин
  • Отдельный технологический стек от проекта Astro

Astro + Starlight

  • SSG на основе Astro
  • Встроенные стили Starlight
  • Mermaid через CDN
  • Единый фреймворк с основным сайтом

Часто задаваемые вопросы

Каковы преимущества миграции с VitePress на Starlight?

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

Как рендерятся диаграммы Mermaid?

Мы перешли от зависимости от плагина к загрузке Mermaid через CDN (jsdelivr). Это полностью устраняет зависимости сборки и обеспечивает стабильный рендеринг диаграмм.

Сколько усилий требует миграция?

Основные задачи — преобразование структуры каталогов (docs/ → src/content/docs/) и корректировка frontmatter. Поскольку сам контент в Markdown, его можно использовать как есть, что делает миграцию относительно быстрой.