MDX — это расширение Markdown, которое позволяет использовать JSX внутри Markdown-файлов. Это открывает мощные возможности для построения динамической и интерактивной документации. Версионирование документации с использованием MDX позволяет поддерживать несколько версий документации параллельно, обеспечивая стабильность информации для разных релизов продукта.
Для реализации версионирования необходимо продумать организацию файлов и директорий. Обычно структура выглядит следующим образом:
docs/
├── v1.0/
│ ├── introduction.mdx
│ ├── setup.mdx
│ └── components/
├── v2.0/
│ ├── introduction.mdx
│ ├── setup.mdx
│ └── components/
├── current/
│ ├── introduction.mdx
│ ├── setup.mdx
│ └── components/
components,
api или guides.MDX файлы импортируются и обрабатываются через систему сборки (Webpack, Vite, Next.js). Для поддержки версий можно создать конфигурацию, которая динамически выбирает путь к документации:
import fs from 'fs';
import path from 'path';
export function getDocs(version, page) {
const docPath = path.join(process.cwd(), 'docs', version, `${page}.mdx`);
if (!fs.existsSync(docPath)) {
throw new Error(`Документация для версии ${version} и страницы ${page} не найдена`);
}
return fs.readFileSync(docPath, 'utf-8');
}
Такой подход позволяет гибко загружать контент для конкретной версии и страницы без необходимости вручную изменять ссылки на файлы.
Для веб-приложений, построенных на React и Next.js, маршрутизация версий документации обычно строится на параметрах URL:
/docs/v1.0/introduction
/docs/v2.0/setup
Пример динамического маршрута в Next.js:
import { useRouter } from 'next/router';
import { getDocs } from '../. ./lib/docs';
export default function DocPage({ content }) {
const router = useRouter();
const { version, slug } = router.query;
return (
);
}
export async function getStaticProps({ params }) {
const content = getDocs(params.version, params.slug);
return { props: { content } };
}
export async function getStaticPaths() {
// Генерация путей для всех версий и страниц
}
v2.1.sidebar.json или конфигурацию меню, чтобы навигация была
независимой.MDX позволяет интегрироваться с системами генерации статических сайтов, такими как Docusaurus, Next.js, Gatsby, где есть встроенные механизмы версионирования. Например, Docusaurus автоматически управляет версиями документации через команду:
npx docusaurus docs:version 2.0
Эта команда создает новую директорию с версией, дублируя текущий контент и обеспечивая корректные ссылки между версиями. MDX-файлы остаются полностью совместимыми и могут содержать компоненты React, интерактивные блоки и кастомные элементы интерфейса.