Автоматическое формирование навигации новинка
В Rspress, помимо объявления nav и sidebar в конфигурационном файле, вы также можете автоматически генерировать панель навигации и боковую панель, создав файлы описания _nav.json и _meta.json. Мы рекомендуем использовать второй способ, поскольку он позволяет сохранить конфигурационный файл компактным, поддерживает HMR (горячую замену модулей) и при этом всё остаётся доступным через themeConfig.
Автоматическая генерация панели навигации и бокового меню будет работать только в том случае, если в файле rspress.config.ts отсутствуют настройки nav и sidebar.
Основные понятия
Rspress генерирует nav через файл _nav.json, а sidebar — через файл _meta.json. Файл _nav.json находится в корневой директории документации, а файл _meta.json — в поддиректориях корня документации. Например:
Если ваша документация поддерживает i18n, то файл _nav.json будет размещён в соответствующей языковой директории, например:
Подсказки типов по JSON-схеме
Чтобы удобнее редактировать файлы _nav.json и _meta.json, в Rspress V2 предусмотрены два файла схем: @rspress/core/meta-json-schema.json и @rspress/core/nav-json-schema.json. Они обеспечивают подсказки типов в редакторе.
Например, в VS Code можно добавить следующую настройку в файл .vscode/settings.json:
Настройка навигации
В файле _nav.json указывается массив элементов. Его структура и тип полностью совпадают с конфигурацией nav стандартной темы. Подробности — в разделе конфигурация nav. Например:
Настройка сайдбара
В файле _meta.json указывается массив элементов, каждый из которых имеет следующий тип:
file
- Когда тип —
string, элемент обозначает файл, а сама строка — имя этого файла, например:
Имя файла может указываться как с расширением, так и без него — например, introduction будет распознано как introduction.mdx.
- Когда тип — объект, с его помощью можно описать файл, директорию или произвольную ссылку.
Если объект описывает файл, то поддерживаются следующие поля:
name— имя файла (поддерживается как с суффиксом, так и без него)label— отображаемое в боковом меню название файла (необязательное поле; если не указать, будет автоматически использовано заголовок h1 из документа)overviewHeaders— заголовки, которые отображаются на странице-обзоре файла (необязательное поле, значение по умолчанию —[2])context— значение атрибутаdata-context, добавляемое к DOM-узлу пункта бокового меню при генерации (необязательное поле, по умолчанию не добавляется)
Например:
dir
Если объект описывает директорию, то поддерживаются следующие поля:
name— имя директорииlabel— отображаемое в боковом меню название директорииcollapsible— можно ли сворачивать директориюcollapsed— свёрнута ли директория по умолчаниюoverviewHeaders— уровни заголовков, отображаемые на странице-обзоре файлов этой директории (необязательное поле, значение по умолчанию —[2])context— значение атрибутаdata-context, добавляемое к DOM-узлу пункта бокового меню при генерации (необязательное поле, по умолчанию не добавляется)
Например:
Если вы хотите отображать документ при клике на каталог в боковой панели, рекомендуется создать файл index.mdx внутри этого каталога, например:
Это означает, что в боковой панели будет содержаться только документ getting-started. При клике на каталог Guide будет отображаться содержимое файла index.mdx.
dir-section-header
При описании директории также можно использовать dir-section-header. От обычного "type": "dir" он отличается только визуально. Чаще всего применяется на первом уровне, когда название директории отображается как заголовок раздела и находится на одном уровне с файлами внутри директории.
Тип:
divider
Если объект описывает разделитель, то поддерживаются следующие поля:
Когда dashed установлен в true — линия разделителя будет пунктирной, иначе — сплошной.
section-header
Если объект описывает заголовок раздела, то поддерживаются следующие поля:
label— отображаемое в боковом меню название заголовка раздела. Например:
Таким образом вы можете добавлять в боковое меню заголовки разделов — это удобно для группировки документов и директорий. Обычно их используют вместе с divider, чтобы лучше визуально отделять разные группы. Например:
custom-link
Если объект описывает произвольную ссылку, то поддерживаются следующие поля:
link— адрес ссылкиlabel— отображаемое в боковом меню название ссылки
Например:
Поле link поддерживает внешние ссылки, например:
Также можно использовать поле items, чтобы создать вложенные произвольные ссылки, например:
Полный пример
Вот полный пример с использованием трёх перечисленных выше типов ссылок:
Использование без конфигурации
В некоторых директориях можно не создавать файл _meta.json и позволить Rspress автоматически генерировать боковое меню. Это работает при условии, что директория содержит только документы (без вложенных поддиректорий) и вам не важен порядок отображения документов. Например, есть следующая структура документов:
В директории guides можно настроить _meta.json следующим образом:
В директории basic можно не создавать _meta.json — тогда Rspress автоматически сформирует для неё боковое меню. По умолчанию сортировка будет алфавитной по имени файла. Если нужно задать свой порядок, добавьте к имени файла числовой префикс, например:
Иконки-тэги для боковой панели и навигационной панели
Вы можете добавлять иконки после заголовков в боковой панели или навигационной панели через конфигурацию tag. Значение tag поддерживает строки SVG-тегов или URL-адреса изображений.
Для получения подробной информации об использовании обратитесь к компоненту Tag.

