close

Мультиверсионность

Стандартная тема Rspress поддерживает управление несколькими версиями документации. Далее расскажем, как подключить мультиверсионность.

Настройка multiVersion

Список версий и версия по умолчанию задаются через параметр multiVersion. Пример:

rspress.config.ts
import { defineConfig } from '@rspress/core';

export default defineConfig({
  multiVersion: {
    default: 'v1',
    versions: ['v1', 'v2'],
  },
});

Здесь default — это версия по умолчанию, а versions — список всех доступных версий.

Добавление документов для разных версий

В соответствии со списком версий, который вы настроили, добавьте документы разных версий в директорию docs. Пример:

docs
v1
index.mdx
guide
index.mdx
v2
index.mdx
guide
index.mdx

В системе маршрутизации Rspress для версии по умолчанию префикс версии автоматически опускается. Например, файл v1/index.mdx будет доступен по маршруту /, а файл v2/index.mdx — по маршруту /v2/.

Подсказка

В ссылках внутри документов вручную добавлять префикс версии не нужно. Rspress автоматически подставит нужный префикс в зависимости от версии текущего документа. Например, ссылка /guide/ в файле v2/ будет преобразована в /v2/guide/.

Использование вместе с i18n

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

rspress.config.ts
import { defineConfig } from '@rspress/core';

export default defineConfig({
  lang: 'ru',
  locales: [
    {
      lang: 'en',
      label: 'English',
    },
    {
      lang: 'ru',
      label: 'Русский',
    },
  ],
  multiVersion: {
    default: 'v1',
    versions: ['v1', 'v2'],
  },
});

Структура каталогов документа должна быть организована следующим образом:

docs
v1
en
_nav.json
index.md
guide
index.md
ru
_nav.json
index.md
guide
index.md
v2
en
_nav.json
index.md
guide
index.md
ru
_nav.json
index.md
guide
index.md

Сгенерированные маршруты следуют шаблону /{version}/{lang}/:

Путь к файлуМаршрут
v1/en/index.md/ (версия по умолчанию + язык по умолчанию, оба префикса опущены)
v1/ru/index.md/ru/
v2/en/index.md/v2/
v2/ru/index.md/v2/ru/

Получение текущей версии в компонентах

В компонентах текущую версию можно получить с помощью хука useVersion, например:

import { useVersion } from '@rspress/core/runtime';

export default () => {
  const version = useVersion();
  return <div>Текущая версия: {version}</div>;
};

Поиск, специфичный для версии

По умолчанию search.versioned установлен в true, что означает, что поиск будет выполняться только по индексу, соответствующему текущей выбранной версии. Если вы хотите выполнять поиск по всем версиям, можно установить значение false:

rspress.config.ts
import { defineConfig } from '@rspress/core';

export default defineConfig({
  multiVersion: {
    default: 'v1',
    versions: ['v1', 'v2'],
  },
  search: {
    versioned: false,
  },
});