Конфигурация сайта — это место, где вы можете определить глобальные настройки сайта. Параметры конфигурации приложения определяют настройки, которые применяются к каждому сайту VitePress, независимо от того, какая тема на нем используется. Например, базовый каталог или название сайта.
## Обзор {#overview}
### Разрешение конфигурации {#config-resolution}
Файл конфигурации всегда разрешается из `<root>/.vitepress/config.[ext]`, где `<root>` — это корень вашего [проекта](../guide/routing#root-and-source-directory) VitePress, а`[ext]` — одно из поддерживаемых расширений файла. TypeScript поддерживается из коробки. Поддерживаемые расширения включают `.js`, `.ts`, `.mjs` и `.mts`.
В файлах конфигурации рекомендуется использовать синтаксис ES-модулей. Файл конфигурации должен по умолчанию экспортировать объект:
```ts
export default {
// параметры конфигурации на уровне приложения
lang: 'ru-RU',
title: 'VitePress',
description: 'Генератор статических сайтов на основе Vite и Vue.',
Использование помощника `defineConfig` обеспечит интеллектуальный анализ опций конфигурации на основе TypeScript. Если ваша IDE поддерживает эту функцию, она должна работать как в JavaScript, так и в TypeScript.
```js
import { defineConfig } from 'vitepress'
export default defineConfig({
// ...
})
```
### Типизированная конфигурация темы {#typed-theme-config}
По умолчанию помощник `defineConfig` ожидает тип конфигурации темы из темы по умолчанию:
```ts
import { defineConfig } from 'vitepress'
export default defineConfig({
themeConfig: {
// Тип `DefaultTheme.Config`
}
})
```
Если вы используете пользовательскую тему и хотите проверять типы для конфигурации темы, вам нужно использовать `defineConfigWithTheme`, и передавать тип конфигурации для вашей пользовательской темы через общий аргумент:
### Настройка Vite, Vue и Markdown {#vite-vue-markdown-config}
- **Vite**
Вы можете настроить базовый экземпляр Vite с помощью опции [vite](#vite) в конфигурации VitePress. Нет необходимости создавать отдельный файл конфигурации Vite.
- **Vue**
VitePress уже включает в себя официальный плагин Vue для Vite ([@vitejs/plugin-vue](https://github.com/vitejs/vite-plugin-vue)). Вы можете настроить его параметры с помощью опции [vue](#vue) в конфигурации VitePress.
- **Markdown**
Вы можете настроить базовый экземпляр [Markdown-It](https://github.com/markdown-it/markdown-it) с помощью опции [markdown](#markdown) в конфигурации VitePress.
## Метаданные сайта {#site-metadata}
### title {#title}
- Тип: `string`
- По умолчанию: `VitePress`
- Можно переопределить для каждой страницы с помощью [метаданных](./frontmatter-config#title)
Название для сайта. При использовании темы по умолчанию оно будет отображаться в панели навигации.
Оно также будет использоваться в качестве суффикса по умолчанию для всех заголовков отдельных страниц, если не определен [`titleTemplate`](#titletemplate). Окончательный заголовок отдельной страницы будет представлять собой текстовое содержимое её первого заголовка `<h1>`, объединённое с глобальным `title` в качестве суффикса. Например, со следующей конфигурацией и содержимым страницы:
```ts
export default {
title: 'Мой замечательный сайт'
}
```
```md
# Привет
```
Заголовок страницы будет таким: `Привет | Мой замечательный сайт`.
### titleTemplate {##titletemplate}
- Тип: `string | boolean`
- Можно переопределить для каждой страницы с помощью [метаданных](./frontmatter-config#titletemplate)
Позволяет настраивать суффикс заголовка каждой страницы или весь заголовок. Например:
```ts
export default {
title: 'Мой замечательный сайт',
titleTemplate: 'Пользовательский суффикс'
}
```
```md
# Привет
```
Заголовок страницы будет таким: `Привет | Пользовательский суффикс`.
Чтобы полностью настроить отображение заголовка, вы можете использовать символ `:title` в `titleTemplate`:
Здесь `:title` будет заменён текстом, выведенным из первого заголовка страницы `<h1>`. Заголовок страницы предыдущего примера будет `Привет - Пользовательский суффикс`.
Опция может быть установлена в значение `false`, чтобы отключить суффиксы заголовков.
### description {#description}
- Тип: `string`
- По умолчанию: `A VitePress site`
- Можно переопределить для каждой страницы с помощью [метаданных](./frontmatter-config#description)
Описание для сайта. Это будет отображаться как тег `<meta>` в HTML-странице.
```ts
export default {
description: 'A VitePress site'
}
```
### head {#head}
- Тип: `HeadConfig[]`
- По умолчанию: `[]`
- Можно добавлять на страницу через [метаданные](./frontmatter-config#head)
Дополнительные элементы для отображения в теге `<head>` в HTML-странице. Добавленные пользователем теги выводятся перед закрывающим тегом `head`, после тегов VitePress.
Атрибут lang для сайта. Будет выглядеть как тег `<html lang="en-US">` в HTML-странице.
```ts
export default {
lang: 'en-US'
}
```
### base {#base}
- Тип: `string`
- По умолчанию: `/`
Базовый URL-адрес, по которому будет развёрнут сайт. Этот параметр необходимо задать, если вы планируете развернуть свой сайт по подпути, например, для страниц GitHub. Если вы планируете развернуть свой сайт на `https://foo.github.io/bar/`, то вам следует установить base на `'/bar/'`. Он всегда должен начинаться и заканчиваться косой чертой.
Параметр `base` автоматически добавляется ко всем URL, которые начинаются с`/` в других опциях, поэтому вам нужно указать его только один раз.
```ts
export default {
base: '/base/'
}
```
## Маршрутизация {#routing}
### cleanUrls {#cleanurls}
- Тип: `boolean`
- По умолчанию: `false`
Если установить значение `true`, VitePress будет удалять из URL-адресов завершающий `.html`. Также смотрите [Создание чистого URL-адреса](../guide/routing#generating-clean-url).
::: warning Требуется поддержка сервера
Для включения этой функции может потребоваться дополнительная настройка на вашей хостинговой платформе. Чтобы это сработало, ваш сервер должен быть способен обслуживать `/foo.html` при посещении `/foo`**без редиректа**.
:::
### rewrites {#rewrites}
- Тип: `Record<string, string>`
Определяет сопоставление пользовательских каталогов с URL-адресами. Дополнительную информацию см. в секции [Маршрутизация: перезапись маршрутов](../guide/routing#route-rewrites).
```ts
export default {
rewrites: {
'source/:page': 'destination/:page'
}
}
```
## Сборка {#build}
### srcDir {#srcdir}
- Тип: `string`
- По умолчанию: `.`
Каталог, в котором хранятся ваши страницы в формате Markdown, относительно корня проекта. Также смотрите [Корневая директория и директория с исходными файлами](../guide/routing#root-and-source-directory).
```ts
export default {
srcDir: './src'
}
```
### srcExclude {#srcexclude}
- Тип: `string`
- По умолчанию: `undefined`
[Шаблон](https://github.com/mrmlnc/fast-glob#pattern-syntax) для поиска файлов, которые должны быть исключены из исходного содержимого.
```ts
export default {
srcExclude: ['**/README.md', '**/TODO.md']
}
```
### outDir {#outdir}
- Тип: `string`
- По умолчанию: `./.vitepress/dist`
Расположение вывода сборки для сайта, относительно [корня проекта](../guide/routing#root-and-source-directory).
```ts
export default {
outDir: '../public'
}
```
### assetsDir {#assetsdir}
- Тип: `string`
- По умолчанию: `assets`
Укажите каталог, в котором будут храниться сгенерированные ресурсы. Путь должен находиться внутри [`outDir`](#outdir) и разрешается относительно него.
```ts
export default {
assetsDir: 'static'
}
```
### cacheDir {#cachedir}
- Тип: `string`
- По умолчанию: `./.vitepress/cache`
Каталог для файлов кэша, относительно [корня проекта](../guide/routing#root-and-source-directory). См. также: [cacheDir](https://vitejs.dev/config/shared-options.html#cachedir).
Если установлено значение `true`, метаданные страницы извлекаются в отдельный фрагмент JavaScript, а не вставляются в исходный HTML. Это уменьшает полезную нагрузку HTML каждой страницы и делает метаданные страниц кэшируемыми, что позволяет снизить пропускную способность сервера при наличии большого количества страниц на сайте.
Если установлено значение `true`, производственное приложение будет создано в [режиме MPA](../guide/mpa-mode). В режиме MPA по умолчанию используется 0 КБ JavaScript, что приводит к отключению навигации на стороне клиента и требует явного согласия на интерактивность.
- Если для опции установлено значение `force-dark`, тема всегда будет темной, и пользователи не смогут её переключать.
- Если для опции установлено значение `force-auto`, тема всегда будет определяться предпочитаемой пользователем цветовой схемой, и пользователи не смогут её переключать.
Эта опция вставляет встроенный скрипт, который восстанавливает настройки пользователей из локального хранилища с помощью ключа `vitepress-theme-appearance`. Это гарантирует, что класс `.dark` будет применён до отрисовки страницы, чтобы избежать мерцания.
`appearance.initialValue` может быть только `'dark' | undefined`. Ссылки или геттеры не поддерживаются.
### lastUpdated {#lastupdated}
- Тип: `boolean`
- По умолчанию: `false`
Получать ли временную метку последнего обновления для каждой страницы с помощью Git. Временная метка будет включена в данные каждой страницы, доступные через [`useData`](./runtime-api#usedata).
При использовании темы по умолчанию включение этой опции приведёт к отображению времени последнего обновления каждой страницы. Вы можете настроить текст с помощью опции [`themeConfig.lastUpdatedText`](./default-theme-config#lastupdatedtext).
## Кастомизация {#customization}
### markdown {#markdown}
- Тип: `MarkdownOption`
Настройте параметры парсера Markdown. VitePress использует [Markdown-it](https://github.com/markdown-it/markdown-it) в качестве парсера и [Shiki](https://github.com/shikijs/shiki) для подсветки синтаксиса языка. Внутри этой опции вы можете передать различные параметры, связанные с Markdown, в соответствии с вашими потребностями.
```js
export default {
markdown: {...}
}
```
Проверьте [объявление типа и jsdocs](https://github.com/vuejs/vitepress/blob/main/src/node/markdown/markdown.ts) на наличие всех доступных опций.
### vite {#vite}
- Тип: `import('vite').UserConfig`
Передаёт необработанную [конфигурацию Vite](https://vitejs.dev/config/) внутреннему серверу разработки / сборщику Vite.
`transformHead` — это хук сборки для преобразования заголовка перед генерацией каждой страницы. Это позволит вам добавить в конфигурацию VitePress записи, которые не могут быть добавлены статически. Вам нужно только вернуть дополнительные записи, они будут автоматически объединены с существующими.
page: string // например, index.md (относительно srcDir)
assets: string[] // все ресурсы, не относящиеся к js/css, в виде полностью разрешённых публичных URL-адресов
siteConfig: SiteConfig
siteData: SiteData
pageData: PageData
title: string
description: string
head: HeadConfig[]
content: string
}
```
Обратите внимание, что этот хук вызывается только при статической генерации сайта. Он не вызывается во время разработки. Если вам нужно добавить динамические записи в голову во время разработки, вместо этого вы можете использовать хук [`transformPageData`](#transformpagedata):
`transformPageData` — это хук для преобразования `pageData` каждой страницы. Вы можете напрямую изменять `pageData` или возвращать изменённые значения, которые будут объединены с данными страницы.
Не мутируйте ничего внутри `context` и будьте осторожны, это может повлиять на производительность dev-сервера, особенно если у вас есть некоторые сетевые запросы или тяжёлые вычисления (например, генерация изображений) в хуке. Вы можете проверить `process.env.NODE_ENV === 'production'` для условной логики.