Перейти к основному содержимому

Docusaurus

Руководителю Аналитику Техническому писателю

Docusaurus

Вселенная IT развёрнута на Docusaurus.


Определение и общая характеристика

Docusaurus представляет собой генератор статических сайтов с открытым исходным кодом, созданный на базе React. Инструмент предназначен для построения документации, блогов и образовательных ресурсов с использованием Markdown и MDX форматов. Система обеспечивает автоматическую генерацию HTML страниц из текстовых файлов разметки с поддержкой интерактивных компонентов React.

Платформа включает встроенные возможности для навигационной структуры, темизации интерфейса, поиска контента, синтаксического подсвечивания кода и адаптивного оформления под мобильные устройства. Процесс сборки преобразует исходные тексты в полный набор статических HTML файлов, CSS стилей и JavaScript скриптов без необходимости работы с серверной частью базы данных при каждом обращении пользователя.


Архитектурная модель Docusaurus

Структура файлов и директорий

Проект на базе Docusaurus организуется по строгой файловой схеме с выделенными областями конфигурации и содержимого. Каждая директория выполняет специфические функции и не пересекается с другими функциональными зонами.

ДиректорияНазначениеТип Содержимого
docs/Хранение исходной документацииMarkdown (.md), MDX (.mdx) файлы
src/Источники пользовательского кодаReact компоненты, CSS, страницы
static/Статические ресурсыИзображения, шрифты, favicon
i18n/Локализованные настройкиМногоязычные тексты, переводы
docusaurus.config.jsКонфигурация проектаJavaScript объекты параметров
sidebars.jsНастройка навигацииМассивы определений меню

Все содержимое генерируется из директории docs/, без обращения к внешним системам управления контентом (CMS). Навигация управляется декларативно через файл sidebars.js. Пользовательские элементы интерфейса размещаются в директории src/ с последующим подключением в конфигурационных файлах.


Иерархия обработки файлов

Процесс построения сайта проходит несколько стадий обработки:

  1. Чтение конфигурационного файла docusaurus.config.js
  2. Загрузка файлов из директории docs/
  3. Парсинг Markdown и MDX синтаксиса
  4. Применение плагинов и тем оформления
  5. Генерация таблиц содержания (Table of Contents)
  6. Сборка финальных HTML документов
  7. Копирование статических ресурсов в выходную директорию

Каждая страница проходит полный цикл обработки независимо от положения в иерархии навигации. Системы маршрутизации формируют URL автоматически на основе путей файлов внутри docs/.


Трансформация MD/MDX в HTML

Различия между Markdown и MDX

Markdown представляет собой упрощённый язык разметки для форматирования текста. Синтаксис определяет заголовки, списки, цитаты, блоки кода и гиперссылки. Инструменты обработки конвертируют такие документы в валидный HTML код для отображения в браузере.

MDX расширяет возможности Markdown интеграцией экспорта React компонентов внутрь текстового потока. Файл формата MDX содержит стандартные markdown конструкции совместно с импортируемыми элементами интерфейса React. Такая комбинация позволяет создавать интерактивные блоки: таймеры, калькуляторы, карты схем, динамические диаграммы.

// Пример использования компонента внутри MDX файла
import Timer from '@site/src/components/Timer';

<Timer seconds={60} />

## Заголовок раздела
Текстовое содержание после интерактивного элемента

Процесс конвертации

Сборщик Docusaurus выполняет следующие операции трансформации:

  • Сканирование всех файлов с расширением .md и .mdx
  • Разбор YAML фронтматеров в начале документа
  • Преобразование Markdown синтаксиса в промежуточное представление
  • Встраивание компонентов React из импорта в DOM структуру
  • Добавление метаинформации о странице в теги head HTML
  • Генерация навигационных ссылок между смежными документами
  • Формирование полной таблицы содержания в боковой панели
  • Создание JSON индексов для системы поиска

Конечный результат представляет собой готовый к развёртыванию набор HTML файлов, соответствующих структуре оригинального источника данных.


Управление навигацией

Файл configuration

Главное меню управляет элементом навигационной панели сайта через свойства объекта конфигурации navbar.items. Каждый элемент списка определяется как объект с идентификатором, типом, меткой и целевой ссылкой.

module.exports = {
// ...
navbar: {
title: 'Техническая Документация',
logo: {
alt: 'Логотип Проекта',
src: '/img/logo.svg',
},
items: [
{
type: 'docSidebar',
sidebarId: 'tutorialSidebar',
position: 'left',
label: 'Руководство',
},
{
type: 'doc',
docId: 'intro',
position: 'left',
label: 'Введение',
},
{
href: 'https://github.com/user/repo',
label: 'GitHub',
position: 'right',
},
],
},
};

Элементы меню поддерживают различные типы: ссылки на документы (doc), боковые панели (docSidebar), выпадающие списки (dropdown), кастомные ссылки (link). Расположение каждого пункта определяют параметры position: left/right/center.


Файл sidebars

Структура сайдбара управляется отдельным файлом sidebars.js. Этот модуль описывает древовидную организацию разделов документации с возможностью группировки, иерархической вложенности и динамического добавления элементов.

module.exports = {
tutorialSidebar: [
{
type: 'category',
label: 'Основы',
collapsed: false,
items: ['getting-started', 'installation', 'configuration'],
},
{
type: 'category',
label: 'Продвинутые темы',
items: ['advanced-usage', 'deployment', 'customization'],
},
'api-reference',
],
};

Доступные типы элементов:

Тип ЗначениеОписание
docСсылка на одиночный документ
categoryГруппировка связанных документов
autogeneratedАвтоматически сгенерированный список
htmlКастомный HTML блок

Флаги collapsed: true/false определяют состояние развернутого вида по умолчанию. Глубина вложенности не ограничивается архитектурой.


Настройки футера размещаются в объекте footer конфигурационного файла docusaurus.config.js. Параметр links содержит массив ссылок, разбитых по категориям.

module.exports = {
footer: {
style: 'dark',
links: [
{
title: 'Ресурсы',
items: [
{
label: 'Описание',
to: '/docs/about',
},
{
label: 'Документация',
to: '/docs/intro',
},
],
},
{
title: 'Сообщество',
items: [
{
label: 'GitHub',
href: 'https://github.com',
},
],
},
],
copyright: '© 2026 Проект Все права защищены.',
},
};

Параметр style определяет цветовую схему: light или dark. Поле copyright задает текст уведомления об авторских правах.


Конфигурационные параметры

docusaurus.config.js

Файл docusaurus.config.js содержит все системные настройки проекта. Объект экспортируется через CommonJS или ECMAScript Modules и может включать множество опций.

Базовая структура:

const config = {
title: 'Заголовок Сайта',
tagline: 'Подзаголовок Описания',
url: 'https://example.com',
baseUrl: '/',
favicon: 'img/favicon.ico',
organizationName: 'Organization Name',
projectName: 'Project Name',

// Интеграции
i18n: {
defaultLocale: 'ru',
locales: ['ru', 'en'],
},

// Плагин для поиска
plugins: [
require.resolve('docusaurus-plugin-content-docs'),
],
};

module.exports = config;

Ключевые параметры:

ПараметрТипНазначение
titlestringПолное название сайта
taglinestringКраткое описание в шапке
urlstringДомен размещения
baseUrlstringКорневой путь развёртывания
faviconstringПуть к иконке браузера
themeConfigobjectНастройки визуального стиля
pluginsarrayСписок установленных расширений
themesarrayДополнительные темы

Theme configuration

Тема оформления определяет визуальные характеристики интерфейса: цвета, типографику, размер шрифта, режимы (светлая/тёмная).

const themes = require('docusaurus-theme-classic');

module.exports = {
themeConfig: {
colorMode: {
defaultMode: 'light',
disableSwitch: false,
respectPrefersColorScheme: true,
},
prism: {
theme: require('prism-react-renderer/themes/vsLight'),
darkTheme: require('prism-react-renderer/themes/dracula'),
},
algolia: {
appId: 'APPLICATION_ID',
apiKey: 'API_KEY',
indexName: 'INDEX_NAME',
},
},
};

Модификаторы режима оформления:

  • defaultMode: начальное значение светлого/тёмного
  • disableSwitch: флаг отключения переключателя вручную
  • respectPrefersColorScheme: учёт системных настроек пользователя

Технологии рендеринга

Static Site Generation (SSG)

Static Site Generation представляет собой процесс предварительной генерации HTML страниц на этапе сборки проекта. Система читает все исходные документы, применяет шаблоны и создаёт готовые файлы до момента их публичного доступа. Результат сохраняется в статической директории для загрузки на любой веб-сервер.

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

  • Молниеносная скорость отклика при запросе
  • Отсутствие нагрузки на сервер во время просмотра
  • Упрощённая масштабируемость инфраструктуры
  • Снижение требований к ресурсам хостинга
  • Повышенная безопасность через отсутствие бэкенда

Client-Side Hydration

Hydration означает процесс заполнения интерактивной функциональности на клиентской стороне после первоначальной загрузки HTML документа. Браузер получает статический HTML, затем активация JavaScript приводит элементы в рабочее состояние с обработчиками событий и реактивными данными.

Жизненный цикл взаимодействия:

  1. Сервер отдаёт статический HTML файл
  2. Браузер парсит и отображает контент
  3. JavaScript приложение загружается и монтируется
  4. События кликов получают обработчики
  5. Реактивные состояния обновляют интерфейс

Такая модель обеспечивает баланс между SEO производительностью и интерактивностью пользовательского опыта.


Server-Side Rendering (SSR)

Server-Side Rendering предполагает выполнение рендеринга на сервере перед отправкой ответа клиенту. Эта техника актуальна для динамических приложений с изменяющимся контентом при каждом запросе.

Docusaurus поддерживает SSG по умолчанию. SSR становится доступным при использовании специализированных плагинов или модификации ядра сборки. Для большинства случаев технической документации достаточно статической генерации.


React-Based архитектура

Компонентная модель

Docusaurus работает поверх фреймворка React, что предоставляет доступ к экосистеме компонентов библиотеки. Каждая часть интерфейса реализуется как независимый функциональный или классический компонент с собственным состоянием и логикой.

Типичная структура компонента:

// src/components/HomepageHeader.js
import React from 'react';

export default function HomepageHeader() {
return (
<header className="hero">
<h1>Заголовок Секции</h1>
<p>Описание функционала</p>
<a href="/docs" className="button button--primary">
Начать изучение
</a>
</header>
);
}

Компоненты могут принимать пропсы через JSX атрибуты и передавать данные вниз по дереву рендеринга. Использование хуков React позволяет управлять локальным состоянием без глобальных переменных.


CSS modules

CSS Modules обеспечивают изоляцию стилей внутри конкретного компонента. Классы именуются уникально с добавлением хэш-суффикса при сборке для избежания конфликтов между различными частями интерфейса.

Пример использования:

/* src/pages/index.module.css */
.hero {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
padding: 80px 20px;
text-align: center;
}
/* src/components/Hero.jsx */
import styles from './index.module.css';

return <div className={styles.hero}>...</div>;

Такая система гарантирует предсказуемость внешнего вида даже при масштабировании проектов.


Плагины и расширения

Prism.js Syntax Highlighting

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

Конфигурация тем:

module.exports = {
prism: {
theme: require('prism-react-renderer/themes/vsLight'),
darkTheme: require('prism-react-renderer/themes/dracula'),
additionalLanguages: [
'bash',
'csharp',
'java',
'javascript',
'json',
'sql',
'typescript',
],
},
};

Используемые языки:

  • Bash / Shell Script
  • C# (.NET Core)
  • Java / Kotlin
  • JavaScript / TypeScript
  • Python
  • SQL (PostgreSQL, MS SQL)
  • HTML5 / XML / JSON
  • PowerShell

Пример блока кода:

// Внутри .md файла
```python
def calculate_sum(a, b):
return a + b

print(calculate_sum(10, 25))

Дополнительные плагины

Различные расширения добавляют специализированную функциональность в проект:

ПлагинНазначение
docusaurus-preset-classicБазовая настройка пресета
@docusaurus/plugin-sitemapГенерация sitemap.xml
@docusaurus/preset-classicСтандартная конфигурация
docusaurus-plugin-image-zoomУвеличение изображений
@docusaurus/theme-search-localЛокальная поисковая система
@docusaurus/plugin-client-redirectsПеренаправление старых URL
docusaurus-plugin-typedocАвтогенерация API документации
remark-gfmGitHub Flavored Markdown

Плагины активируются путём добавления в массив plugins конфигурационного файла и обязательной установки пакетов через менеджер пакетов Node.js.


Front Matter метаданные

Определение фронтматер

Front Matter представляет собой блок YAML информации в начале каждого Markdown файла. Этот раздел содержит метаданные о документе: заголовок, порядок сортировки, тег уровня сложности, ключевые слова для индексации.

Структура фронтматер:

---
id: introduction-to-javascript
title: Основы JavaScript
sidebar_label: Введение
tags:
- beginner
- programming
- javascript
complexity: easy
description: Краткое введение в синтаксис языка программирования JavaScript
author: Timur Tagirov
date: 2026-01-15
---

Доступные параметры

Параметры фронтматер используются системой навигации и фильтрации:

ПараметрТипОписание
idstringУникальный идентификатор документа
titlestringОтображаемое название страницы
sidebar_labelstringКороткий ярлык в боковом меню
tagsarrayСписок категорий документа
complexitystringУровень сложности: easy/medium/hard
lastUpdatedBystringАвтор последнего изменения
descriptionstringКраткое описание для SEO
authorstringАвтор статьи
datedateДата публикации

Агрегация таблицы содержания

Автоматическая таблица содержания формируется на основе заголовков h2, h3 в теле документа. Дополнительно поддерживается ручной контроль через файл toc.md.

<!-- toc -->
<!-- /toc -->

При обнаружении этого маркера система извлекает все заголовки и строит дерево навигации справа от основного контента.


Правила и ограничения

Ограничения формата документов

Система накладывает ряд требований к структуре файлов для успешной генерации:

  • Все документы должны находиться в директории docs/ или подкаталогах
  • Расширение файлов обязано быть .md или .mdx
  • Фронтматер должен начинаться сразу с первой строки файла без пустых строк между ней и "---"
  • Специальные символы в названии файла заменяются нижними подчеркиваниями
  • Длина пути документа не должна превышать установленные пределы

Лимиты производительности

Большие объёмы данных влияют на скорость сборки:

  • Рекомендуемый максимум количества страниц: до 5000 документов
  • Размер одного документа не должен превышать 50 килобайт текста
  • Количество изображений лучше минимизировать и компрессировать перед загрузкой
  • Использование слишком сложных CSS правил замедляет рендеринг

Требования версии

Необходимые версии инструментов:

  • Node.js: ≥ 18.x LTS
  • npm: ≥ 9.x
  • Docusaurus: версия 3.x или выше

Устаревшие версии Node.js приводят к ошибкам компиляции и недоступности некоторых плагинов.


Установка и развёртывание

Подготовка окружения

Перед началом работы необходимо установить менеджер пакетов и среду выполнения JavaScript. Проверка версий выполняется командой:

node --version
npm --version

Результат должен показывать номера версий, удовлетворяющие требованиям минимум 18.x для Node.js и 9.x для npm.


Инициализация проекта

Создание нового проекта осуществляется через официальный CLI:

npx create-docusaurus@latest my-site classic
cd my-site

Система предложит выбор базового пресета, языка сайта и расположения папок. После завершения запускается локальный dev-сервер для проверки результата.


Команды для работы

Ниже приведён полный список основных операций для управления жизненным циклом проекта.

КомандаНазначениеРежим
npm installУстановка зависимостей из package.jsonПодготовка
npm startЛокальный dev-сервер с hot-reloadРазработка
npm run buildСборка production-версииГенерация
npm run serveЛокальный preview собранного сайтаТестирование
npm run writeРедактирование документовКонтент
npm run publishПубликация на GitHub PagesДеплой

--

Локальный Dev-Сервер

Разработка ведётся на горячем сервере, который автоматически обновляет страницу при изменении файлов:

npm start

После запуска открыть браузер и перейти по адресу http://localhost:3000. Любое изменение в документах немедленно отражается без перезагрузки процесса.


Production сборка

Команда сборки превращает исходники в оптимизированный статический сайт для публикации:

npm run build

Результат сохраняется в директории /build/ или /out/. В этой папке находятся все необходимые файлы для развёртывания на хостинге.


Развёртывание на GitHub Pages

Процесс деплоя включает следующие этапы:

  1. Настройка Remote репозитория
  2. Импорт конфига gh-pages
  3. Вызов скрипта publish
git remote add origin https://github.com/user/repository.git
npm run deploy

Система автоматически собирает сайт и пушит содержимое в ветку gh-pages.


Структура исходного кода

Прямая организация директорий

my-project/
├── docs/ # Источники документов
│ ├── getting-started.md
│ ├── installation.md
│ └── advanced/
│ └── custom-components.md
├── src/ # Пользовательский код
│ ├── components/ # React компоненты
│ │ ├── HomepageHeader.js
│ │ ├── HomepageTabs.js
│ │ ├── HomepageFeatures.js
│ │ └── AnimatedBackground.jsx
│ ├── css/
│ │ └── custom.css
│ └── pages/
│ ├── index.js
│ └── index.module.css
├── static/ # Статические ресурсы
│ ├── img/
│ └── favicon.ico
├── docusaurus.config.js # Главная конфигурация
├── sidebars.js # Боковое меню
├── package.json # зависимости npm
└── README.md # описание проекта

Кастомизация UI

Интерфейс настраивается через CSS файлы в директории src/css/custom.css и использование CSS Modules.

Custom CSS:

/* src/css/custom.css */
:root {
--ifm-color-primary: #25c2a0;
--ifm-color-primary-dark: rgb(33, 175, 144);
--ifm-color-primary-darker: rgb(31, 165, 136);
--ifm-color-primary-darkest: rgb(26, 136, 112);
--ifm-heading-font-family: 'Roboto', sans-serif;
}

[data-theme='dark'] {
--ifm-color-primary: #25c2a0;
}

CSS Modules:

/* src/pages/index.module.css */
.hero {
padding: 80px 20px;
background: linear-gradient(135deg, rgba(37,194,160,1) 0%, rgba(118,75,162,1) 100%);
text-align: center;
}

Главный элемент интерфейса

Компонент HomepageHeader размещает основную информацию на главной странице. Он импортируется в index.js и отображает заголовок, подзаголовок и кнопки действия.

// src/components/HomepageHeader.js
import React from 'react';

export default function HomepageHeader() {
return (
<header className="hero">
<h1>Название Проекта</h1>
<p>Краткое описание предназначения</p>
<a href="/docs/intro" className="button button--primary">
Начать чтение
</a>
</header>
);
}

--

Интерактивные элементы

Для создания сворачиваемых блоков используется HTML элемент <details> со встроенным атрибутом <summary>. Библиотека clsx применяется для условного присвоения классов CSS.

Использование спойлеров:

<details>
<summary>Раскрыть дополнительные сведения</summary>

Здесь располагается скрытый контент
по нажатию на заголовок

</details>
// src/components/CollapsibleSection.jsx
import clsx from 'clsx';

function CollapsibleSection({ isOpen }) {
const classes = clsx('section', { hidden: !isOpen });
return <div className={classes}>...</div>;
}

Анимация фона

Динамический эффект достигается через SVG с градиентным шумом без использования внешних библиотек анимации.

// src/components/AnimatedBackground.jsx
import React, { useEffect } from 'react';

export default function AnimatedBackground() {
useEffect(() => {
// SVG анимация через CSS transitions
}, []);
return <svg className="animated-bg"></svg>;
}

Освоение главы0%