Кастомная тема
-
Для CSS Rspress предоставляет CSS-переменные и BEM-классы для кастомизации.
-
Для JS / React Rspress реализует runtime-интерфейс на основе ESM re-exports, который поддерживает модификацию или замену встроенных компонентов для реализации собственной домашней страницы, боковой панели, компонентов поиска и т. д.
На этой основе существуют два режима:
- wrap: Оборачивать и улучшать встроенные компоненты Rspress через пропсы и слоты.
- eject: Полностью переопределить весь компонент. Вы можете использовать команду
rspress eject, чтобы скопировать исходный код локально и изменить его напрямую.
Далее они будут представлены по порядку в зависимости от степени кастомизации темы.
CSS-переменные
Rspress предоставляет некоторые часто используемые CSS-переменные. По сравнению с переписыванием встроенных React-компонентов Rspress, переопределение CSS-переменных для кастомизации проще и легче в поддержке. Вы можете просмотреть эти CSS-переменные на странице UI - CSS-переменные и переопределить их через:
Другой подход — использовать конфигурацию globalStyles в файле rspress.config.ts:
BEM-классы
Все встроенные компоненты Rspress используют соглашение об именовании BEM. Вы можете использовать эти имена классов для переопределения стилей таким же образом, как и CSS-переменные.
Например:
Переопределение встроенных компонентов с использованием повторного экспорта ESM
По умолчанию необходимо создать директорию theme в корне проекта, а затем создать в ней файл index.ts или index.tsx. Этот файл используется для экспорта компонентов темы.
Вы можете написать файл theme/index.tsx, используя встроенные компоненты из @rspress/core/theme-original:
При переопределении встроенных компонентов через повторный экспорт ESM все внутренние ссылки Rspress на встроенные компоненты будут преимущественно использовать вашу переэкспортированную версию.
@rspress/core/theme-original используется для избежания циклических ссылок, применяйте его только при настройке тем.
-
В директории
docsиспользуйте@rspress/core/theme, который указывает на вашtheme/index.tsx. -
В директории
themeиспользуйте@rspress/core/theme-original, который всегда указывает на встроенные компоненты темы Rspress.
Wrap: Передача пропсов и слотов
Wrap означает добавление пропсов к переэкспортируемым компонентам. Вот пример вставки некоторого содержимого перед заголовком панели навигации:
Компонент Layout разработан с использованием ряда слот-пропсов, специально предназначенных для обёртки. Вы можете использовать эти пропсы для расширения макета темы по умолчанию:
Eject: Полное переопределение компонента
Eject означает прямое переопределение одного встроенного компонента Rspress, используя полностью вашу собственную версию. Для этого Rspress предоставляет команду rspress eject [component], чтобы скопировать исходный код встроенных компонентов локально и изменить их напрямую. Шаги следующие:
-
Выполните CLI-команду, Rspress извлечет исходный код указанного компонента в локальную директорию
theme/components, не извлекая зависимости. -
Обновите re-export в
theme/index.tsx:
- Измените файл
theme/components/DocFooter.tsxпо мере необходимости, чтобы удовлетворить вашим требованиям.
Чтобы облегчить пользователям процесс eject, компоненты Rspress разделены с высокой детализацией. Вы можете увидеть, какие компоненты подходят для eject в Layout Components.
Eject увеличит затраты на сопровождение, потому что при будущих обновлениях Rspress эти выброшенные компоненты не будут автоматически получать обновления, и вам придётся вручную сравнивать и сливать изменения.
Пожалуйста, сначала проверьте, может ли режим wrap удовлетворить ваши потребности. Рассматривайте eject только в том случае, когда wrap не справляется с задачей.

