# Конфигурация
Repomix можно настроить с помощью файла конфигурации или параметров командной строки. Файл конфигурации позволяет настраивать различные аспекты обработки и вывода вашей кодовой базы.
## Форматы файла конфигурации
Repomix поддерживает несколько форматов файлов конфигурации для гибкости и удобства использования.
Repomix автоматически ищет файлы конфигурации в следующем порядке приоритета:
1. **TypeScript** (`repomix.config.ts`, `repomix.config.mts`, `repomix.config.cts`)
2. **JavaScript/ES Module** (`repomix.config.js`, `repomix.config.mjs`, `repomix.config.cjs`)
3. **JSON** (`repomix.config.json5`, `repomix.config.jsonc`, `repomix.config.json`)
### Конфигурация JSON
Создайте файл конфигурации в директории вашего проекта:
```bash
repomix --init
```
Это создаст файл `repomix.config.json` с настройками по умолчанию. Вы также можете создать глобальный файл конфигурации, который будет использоваться как запасной, когда локальная конфигурация не найдена:
```bash
repomix --init --global
```
### Конфигурация TypeScript
Файлы конфигурации TypeScript предоставляют лучший опыт разработки с полной проверкой типов и поддержкой IDE.
**Установка:**
Чтобы использовать конфигурацию TypeScript или JavaScript с `defineConfig`, вам нужно установить Repomix как dev-зависимость:
```bash
npm install -D repomix
```
**Пример:**
```typescript
// repomix.config.ts
import { defineConfig } from 'repomix';
export default defineConfig({
output: {
filePath: 'output.xml',
style: 'xml',
removeComments: true,
},
ignore: {
customPatterns: ['**/node_modules/**', '**/dist/**'],
},
});
```
**Преимущества:**
- ✅ Полная проверка типов TypeScript в вашей IDE
- ✅ Отличное автодополнение и IntelliSense
- ✅ Использование динамических значений (временные метки, переменные окружения и т.д.)
**Пример с динамическими значениями:**
```typescript
// repomix.config.ts
import { defineConfig } from 'repomix';
// Генерация имени файла на основе временной метки
const timestamp = new Date().toISOString().slice(0, 19).replace(/[:.]/g, '-');
export default defineConfig({
output: {
filePath: `output-${timestamp}.xml`,
style: 'xml',
},
});
```
### Конфигурация JavaScript
Файлы конфигурации JavaScript работают так же, как TypeScript, поддерживая `defineConfig` и динамические значения.
## Параметры конфигурации
| Параметр | Описание | По умолчанию |
|----------------------------------|-------------------------------------------------------------------------------------------------------------------------------|------------------------|
| `input.maxFileSize` | Максимальный размер файла в байтах для обработки. Файлы больше этого значения будут пропущены. Полезно для исключения больших бинарных или data-файлов | `50000000` |
| `output.filePath` | Имя выходного файла. Поддерживает форматы XML, Markdown и простой текст | `"repomix-output.xml"` |
| `output.style` | Стиль вывода (`xml`, `markdown`, `json`, `plain`). Каждый формат имеет свои преимущества для разных ИИ-инструментов | `"xml"` |
| `output.parsableStyle` | Экранировать вывод согласно выбранной схеме стиля. Улучшает парсинг, но может увеличить количество токенов | `false` |
| `output.compress` | Выполнять интеллектуальное извлечение кода с помощью Tree-sitter для уменьшения количества токенов при сохранении структуры | `false` |
| `output.headerText` | Пользовательский текст для включения в заголовок файла. Полезно для предоставления контекста или инструкций для ИИ-инструментов | `null` |
| `output.instructionFilePath` | Путь к файлу с детальными пользовательскими инструкциями для обработки ИИ | `null` |
| `output.fileSummary` | Включать ли раздел сводки в начале с количеством файлов, размерами и другими метриками | `true` |
| `output.directoryStructure` | Включать ли структуру директорий в вывод. Помогает ИИ понять организацию проекта | `true` |
| `output.files` | Включать ли содержимое файлов в вывод. Установите false для включения только структуры и метаданных | `true` |
| `output.removeComments` | Удалять ли комментарии из поддерживаемых типов файлов. Может уменьшить шум и количество токенов | `false` |
| `output.removeEmptyLines` | Удалять ли пустые строки из вывода для уменьшения количества токенов | `false` |
| `output.showLineNumbers` | Добавлять ли номера строк к каждой строке. Полезно для ссылок на конкретные части кода | `false` |
| `output.truncateBase64` | Обрезать ли длинные строки base64-данных (например, изображения) для уменьшения количества токенов | `false` |
| `output.copyToClipboard` | Копировать ли вывод в системный буфер обмена помимо сохранения файла | `false` |
| `output.topFilesLength` | Количество топ-файлов для отображения в сводке. Если установлено 0, сводка не будет отображаться | `5` |
| `output.includeEmptyDirectories` | Включать ли пустые директории в структуру репозитория | `false` |
| `output.includeFullDirectoryStructure` | При использовании паттернов `include` отображать ли полное дерево директорий (с учётом паттернов игнорирования), обрабатывая только включённые файлы. Предоставляет полный контекст репозитория для анализа ИИ | `false` |
| `output.git.sortByChanges` | Сортировать ли файлы по количеству изменений в git. Файлы с большим количеством изменений появляются внизу | `true` |
| `output.git.sortByChangesMaxCommits` | Максимальное количество коммитов для анализа изменений git. Ограничивает глубину истории для производительности | `100` |
| `output.git.includeDiffs` | Включать ли git diff в вывод. Показывает изменения рабочего дерева и staged отдельно | `false` |
| `output.git.includeLogs` | Включать ли git-логи в вывод. Показывает историю коммитов с датами, сообщениями и путями файлов | `false` |
| `output.git.includeLogsCount` | Количество git-коммитов для включения в вывод | `50` |
| `include` | Паттерны файлов для включения с использованием [glob-паттернов](https://github.com/mrmlnc/fast-glob?tab=readme-ov-file#pattern-syntax) | `[]` |
| `ignore.useGitignore` | Использовать ли паттерны из файла `.gitignore` проекта | `true` |
| `ignore.useDotIgnore` | Использовать ли паттерны из файла `.ignore` проекта | `true` |
| `ignore.useDefaultPatterns` | Использовать ли паттерны игнорирования по умолчанию (node_modules, .git и т.д.) | `true` |
| `ignore.customPatterns` | Дополнительные паттерны для игнорирования с использованием [glob-паттернов](https://github.com/mrmlnc/fast-glob?tab=readme-ov-file#pattern-syntax) | `[]` |
| `security.enableSecurityCheck` | Выполнять ли проверки безопасности с помощью Secretlint для обнаружения конфиденциальной информации | `true` |
| `tokenCount.encoding` | Кодировка подсчёта токенов, используемая токенизатором OpenAI [tiktoken](https://github.com/openai/tiktoken). Используйте `o200k_base` для GPT-4o, `cl100k_base` для GPT-4/3.5. См. [tiktoken model.py](https://github.com/openai/tiktoken/blob/main/tiktoken/model.py#L24) для деталей. | `"o200k_base"` |
Файл конфигурации поддерживает синтаксис [JSON5](https://json5.org/), который позволяет:
- Комментарии (как однострочные, так и многострочные)
- Завершающие запятые в объектах и массивах
- Имена свойств без кавычек
- Более гибкий синтаксис строк
## Валидация схемы
Вы можете включить валидацию схемы для вашего файла конфигурации, добавив свойство `$schema`:
```json
{
"$schema": "https://repomix.com/schemas/latest/schema.json",
"output": {
"filePath": "repomix-output.xml",
"style": "xml"
}
}
```
Это обеспечивает автодополнение и валидацию в редакторах, поддерживающих JSON-схему.
## Пример файла конфигурации
Вот пример полного файла конфигурации (`repomix.config.json`):
```json
{
"$schema": "https://repomix.com/schemas/latest/schema.json",
"input": {
"maxFileSize": 50000000
},
"output": {
"filePath": "repomix-output.xml",
"style": "xml",
"parsableStyle": false,
"compress": false,
"headerText": "Пользовательская информация заголовка для упакованного файла.",
"fileSummary": true,
"directoryStructure": true,
"files": true,
"removeComments": false,
"removeEmptyLines": false,
"topFilesLength": 5,
"showLineNumbers": false,
"truncateBase64": false,
"copyToClipboard": false,
"includeEmptyDirectories": false,
"git": {
"sortByChanges": true,
"sortByChangesMaxCommits": 100,
"includeDiffs": false,
"includeLogs": false,
"includeLogsCount": 50
}
},
"include": ["**/*"],
"ignore": {
"useGitignore": true,
"useDefaultPatterns": true,
// Паттерны также можно указать в .repomixignore
"customPatterns": [
"additional-folder",
"**/*.log"
],
},
"security": {
"enableSecurityCheck": true
},
"tokenCount": {
"encoding": "o200k_base"
}
}
```
## Расположение файлов конфигурации
Repomix ищет файлы конфигурации в следующем порядке:
1. Локальный файл конфигурации в текущей директории (порядок приоритета: TS > JS > JSON)
- TypeScript: `repomix.config.ts`, `repomix.config.mts`, `repomix.config.cts`
- JavaScript: `repomix.config.js`, `repomix.config.mjs`, `repomix.config.cjs`
- JSON: `repomix.config.json5`, `repomix.config.jsonc`, `repomix.config.json`
2. Глобальный файл конфигурации (порядок приоритета: TS > JS > JSON)
- Windows:
- TypeScript: `%LOCALAPPDATA%\Repomix\repomix.config.ts`, `.mts`, `.cts`
- JavaScript: `%LOCALAPPDATA%\Repomix\repomix.config.js`, `.mjs`, `.cjs`
- JSON: `%LOCALAPPDATA%\Repomix\repomix.config.json5`, `.jsonc`, `.json`
- macOS/Linux:
- TypeScript: `~/.config/repomix/repomix.config.ts`, `.mts`, `.cts`
- JavaScript: `~/.config/repomix/repomix.config.js`, `.mjs`, `.cjs`
- JSON: `~/.config/repomix/repomix.config.json5`, `.jsonc`, `.json`
Параметры командной строки имеют приоритет над настройками файла конфигурации.
## Паттерны включения
Repomix поддерживает указание файлов для включения с помощью [glob-паттернов](https://github.com/mrmlnc/fast-glob?tab=readme-ov-file#pattern-syntax). Это позволяет более гибко и мощно выбирать файлы:
- Используйте `**/*.js` для включения всех JavaScript-файлов в любой директории
- Используйте `src/**/*` для включения всех файлов в директории `src` и её поддиректориях
- Комбинируйте несколько паттернов, например `["src/**/*.js", "**/*.md"]` для включения JavaScript-файлов в `src` и всех Markdown-файлов
Вы можете указать паттерны включения в файле конфигурации:
```json
{
"include": ["src/**/*", "tests/**/*.test.js"]
}
```
Или используйте параметр командной строки `--include` для одноразовой фильтрации.
## Паттерны игнорирования
Repomix предлагает несколько методов для установки паттернов игнорирования для исключения конкретных файлов или директорий в процессе упаковки:
- **.gitignore**: По умолчанию используются паттерны из файлов `.gitignore` вашего проекта и `.git/info/exclude`. Это поведение можно контролировать с помощью настройки `ignore.useGitignore` или параметра CLI `--no-gitignore`.
- **.ignore**: Вы можете использовать файл `.ignore` в корне проекта, следуя тому же формату, что и `.gitignore`. Этот файл учитывается такими инструментами, как ripgrep и silver searcher, что уменьшает необходимость поддерживать несколько файлов игнорирования. Это поведение можно контролировать с помощью настройки `ignore.useDotIgnore` или параметра CLI `--no-dot-ignore`.
- **Паттерны по умолчанию**: Repomix включает список по умолчанию часто исключаемых файлов и директорий (например, node_modules, .git, бинарные файлы). Эту функцию можно контролировать с помощью настройки `ignore.useDefaultPatterns` или параметра CLI `--no-default-patterns`. Подробнее см. [defaultIgnore.ts](https://github.com/yamadashy/repomix/blob/main/src/config/defaultIgnore.ts).
- **.repomixignore**: Вы можете создать файл `.repomixignore` в корне проекта для определения паттернов игнорирования, специфичных для Repomix. Этот файл следует тому же формату, что и `.gitignore`.
- **Пользовательские паттерны**: Дополнительные паттерны игнорирования можно указать с помощью параметра `ignore.customPatterns` в файле конфигурации. Вы можете переопределить эту настройку с помощью параметра командной строки `-i, --ignore`.
**Порядок приоритета** (от высшего к низшему):
1. Пользовательские паттерны (`ignore.customPatterns`)
2. Файлы игнорирования (`.repomixignore`, `.ignore`, `.gitignore` и `.git/info/exclude`):
- Во вложенных директориях файлы в более глубоких директориях имеют более высокий приоритет
- В одной директории эти файлы объединяются без определённого порядка
3. Паттерны по умолчанию (если `ignore.useDefaultPatterns` равно true и `--no-default-patterns` не используется)
Этот подход позволяет гибко настраивать исключение файлов в соответствии с потребностями вашего проекта. Это помогает оптимизировать размер сгенерированного упакованного файла, обеспечивая исключение файлов, чувствительных к безопасности, и больших бинарных файлов, предотвращая утечку конфиденциальной информации.
**Примечание:** Бинарные файлы не включаются в упакованный вывод по умолчанию, но их пути перечислены в разделе «Repository Structure» выходного файла. Это обеспечивает полный обзор структуры репозитория, сохраняя упакованный файл эффективным и текстовым. См. [Обработка бинарных файлов](#обработка-бинарных-файлов) для подробностей.
Пример `.repomixignore`:
```text
# Директории кэша
.cache/
tmp/
# Выходные файлы сборки
dist/
build/
# Логи
*.log
```
## Паттерны игнорирования по умолчанию
Когда `ignore.useDefaultPatterns` равно true, Repomix автоматически игнорирует типичные паттерны:
```text
node_modules/**
.git/**
coverage/**
dist/**
```
Полный список см. в [defaultIgnore.ts](https://github.com/yamadashy/repomix/blob/main/src/config/defaultIgnore.ts)
## Обработка бинарных файлов
Бинарные файлы (такие как изображения, PDF, скомпилированные бинарники, архивы и т.д.) обрабатываются особым образом для поддержания эффективного текстового вывода:
- **Содержимое файлов**: Бинарные файлы **не включаются** в упакованный вывод, чтобы сохранить файл текстовым и эффективным для обработки ИИ
- **Структура директорий**: **Пути бинарных файлов перечислены** в разделе структуры директорий, предоставляя полный обзор вашего репозитория
Этот подход обеспечивает полный обзор структуры вашего репозитория, сохраняя эффективный текстовый вывод, оптимизированный для потребления ИИ.
**Пример:**
Если ваш репозиторий содержит `logo.png` и `app.jar`:
- Они появятся в разделе Directory Structure
- Их содержимое не будет включено в раздел Files
**Вывод структуры директорий:**
```
src/
index.ts
utils.ts
assets/
logo.png
build/
app.jar
```
Таким образом, ИИ-инструменты могут понять, что эти бинарные файлы существуют в структуре вашего проекта, не обрабатывая их бинарное содержимое.
**Примечание:** Вы можете контролировать максимальный порог размера файла с помощью параметра конфигурации `input.maxFileSize` (по умолчанию: 50 МБ). Файлы больше этого лимита будут полностью пропущены.
## Продвинутые возможности
### Сжатие кода
Функция сжатия кода, включаемая с помощью `output.compress: true`, использует [Tree-sitter](https://github.com/tree-sitter/tree-sitter) для интеллектуального извлечения существенных структур кода при удалении деталей реализации. Это помогает уменьшить количество токенов, сохраняя важную структурную информацию.
Ключевые преимущества:
- Значительное уменьшение количества токенов
- Сохранение сигнатур классов и функций
- Сохранение импортов и экспортов
- Сохранение определений типов и интерфейсов
- Удаление тел функций и деталей реализации
Подробнее и примеры см. в [Руководстве по сжатию кода](code-compress).
### Интеграция с Git
Конфигурация `output.git` предоставляет мощные функции, учитывающие Git:
- `sortByChanges`: Когда true, файлы сортируются по количеству изменений Git (коммитов, изменивших файл). Файлы с большим количеством изменений появляются внизу вывода. Это помогает приоритизировать более активно разрабатываемые файлы. По умолчанию: `true`
- `sortByChangesMaxCommits`: Максимальное количество коммитов для анализа при подсчёте изменений файлов. По умолчанию: `100`
- `includeDiffs`: Когда true, включает различия Git в вывод (включает изменения рабочего дерева и staged отдельно). Это позволяет видеть ожидающие изменения в репозитории. По умолчанию: `false`
- `includeLogs`: Когда true, включает историю Git-коммитов в вывод. Показывает даты коммитов, сообщения и пути файлов для каждого коммита. Это помогает ИИ понимать паттерны разработки и связи файлов. По умолчанию: `false`
- `includeLogsCount`: Количество последних коммитов для включения в git-логи. По умолчанию: `50`
Пример конфигурации:
```json
{
"output": {
"git": {
"sortByChanges": true,
"sortByChangesMaxCommits": 100,
"includeDiffs": true,
"includeLogs": true,
"includeLogsCount": 25
}
}
}
```
### Проверки безопасности
Когда `security.enableSecurityCheck` включен, Repomix использует [Secretlint](https://github.com/secretlint/secretlint) для обнаружения конфиденциальной информации в вашей кодовой базе перед включением её в вывод. Это помогает предотвратить случайное раскрытие:
- API-ключей
- Токенов доступа
- Приватных ключей
- Паролей
- Других конфиденциальных учётных данных
### Удаление комментариев
Когда `output.removeComments` установлено в `true`, комментарии удаляются из поддерживаемых типов файлов для уменьшения размера вывода и фокусировки на существенном содержимом кода. Это может быть особенно полезно, когда:
- Работаете с сильно документированным кодом
- Пытаетесь уменьшить количество токенов
- Фокусируетесь на структуре и логике кода
Поддерживаемые языки и подробные примеры см. в [Руководстве по удалению комментариев](comment-removal).