Конфигурация
Repomix можно настроить с помощью файла конфигурации или параметров командной строки. Файл конфигурации позволяет настраивать различные аспекты обработки и вывода вашей кодовой базы.
Форматы файла конфигурации
Repomix поддерживает несколько форматов файлов конфигурации для гибкости и удобства использования.
Repomix автоматически ищет файлы конфигурации в следующем порядке приоритета:
- TypeScript (
repomix.config.ts,repomix.config.mts,repomix.config.cts) - JavaScript/ES Module (
repomix.config.js,repomix.config.mjs,repomix.config.cjs) - JSON (
repomix.config.json5,repomix.config.jsonc,repomix.config.json)
Конфигурация JSON
Создайте файл конфигурации в директории вашего проекта:
repomix --initЭто создаст файл repomix.config.json с настройками по умолчанию. Вы также можете создать глобальный файл конфигурации, который будет использоваться как запасной, когда локальная конфигурация не найдена:
repomix --init --globalКонфигурация TypeScript
Файлы конфигурации TypeScript предоставляют лучший опыт разработки с полной проверкой типов и поддержкой IDE.
Установка:
Чтобы использовать конфигурацию TypeScript или JavaScript с defineConfig, вам нужно установить Repomix как dev-зависимость:
npm install -D repomixПример:
// 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
- ✅ Использование динамических значений (временные метки, переменные окружения и т.д.)
Пример с динамическими значениями:
// 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.filePathStyle | Способ отображения путей к файлам в выводе (target-relative сохраняет пути относительно каждого целевого корня, cwd-relative сохраняет пути относительно текущей рабочей директории) | "target-relative" |
output.parsableStyle | Экранировать вывод согласно выбранной схеме стиля. Улучшает парсинг, но может увеличить количество токенов | false |
output.compress | Выполнять интеллектуальное извлечение кода с помощью Tree-sitter для уменьшения количества токенов при сохранении структуры | false |
output.patterns | Уровни детализации для отдельных файлов. Упорядоченный массив записей { pattern, compress?, directoryStructureOnly? }; побеждает первый совпавший glob-паттерн, переопределяя глобальную настройку output.compress для этого файла. См. Уровни детализации для отдельных файлов | Не задано |
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.splitOutput | Разделить вывод на несколько нумерованных файлов по максимальному размеру на часть (напр., 1000000 для ~1МБ). CLI принимает читаемые размеры, такие как 500kb или 2mb. Сохраняет каждый файл в пределах лимита и предотвращает разделение исходных файлов между частями | Не задано |
output.tokenBudget | Завершиться с ненулевым кодом выхода, когда упакованный вывод превышает указанное количество токенов. Действует как защита для контекстных лимитов CI/агентов; вывод всё равно генерируется | Не задано |
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-паттернов | [] |
ignore.useGitignore | Использовать ли паттерны из файла .gitignore проекта | true |
ignore.useDotIgnore | Использовать ли паттерны из файла .ignore проекта | true |
ignore.useDefaultPatterns | Использовать ли паттерны игнорирования по умолчанию (node_modules, .git и т.д.) | true |
ignore.customPatterns | Дополнительные паттерны для игнорирования с использованием glob-паттернов | [] |
security.enableSecurityCheck | Выполнять ли проверки безопасности с помощью Secretlint для обнаружения конфиденциальной информации | true |
tokenCount.encoding | Кодировка подсчёта токенов, совместимая с OpenAI (например, o200k_base для GPT-4o, cl100k_base для GPT-4/3.5). Использует gpt-tokenizer. | "o200k_base" |
Файл конфигурации поддерживает синтаксис JSON5, который позволяет:
- Комментарии (как однострочные, так и многострочные)
- Завершающие запятые в объектах и массивах
- Имена свойств без кавычек
- Более гибкий синтаксис строк
Валидация схемы
Вы можете включить валидацию схемы для вашего файла конфигурации, добавив свойство $schema:
{
"$schema": "https://repomix.com/schemas/latest/schema.json",
"output": {
"filePath": "repomix-output.xml",
"style": "xml"
}
}Это обеспечивает автодополнение и валидацию в редакторах, поддерживающих JSON-схему.
Пример файла конфигурации
Вот пример полного файла конфигурации (repomix.config.json):
{
"$schema": "https://repomix.com/schemas/latest/schema.json",
"input": {
"maxFileSize": 50000000
},
"output": {
"filePath": "repomix-output.xml",
"style": "xml",
"filePathStyle": "target-relative",
"parsableStyle": false,
"compress": false,
"headerText": "Пользовательская информация заголовка для упакованного файла.",
"fileSummary": true,
"directoryStructure": true,
"files": true,
"removeComments": false,
"removeEmptyLines": false,
"topFilesLength": 5,
"showLineNumbers": false,
// "patterns": [
// { "pattern": "docs/**/*", "compress": true },
// { "pattern": "website/**/*", "directoryStructureOnly": true }
// ],
"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 ищет файлы конфигурации в следующем порядке:
- Локальный файл конфигурации в текущей директории (порядок приоритета: 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
- TypeScript:
- Глобальный файл конфигурации (порядок приоритета: 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
- TypeScript:
- 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
- TypeScript:
- Windows:
Параметры командной строки имеют приоритет над настройками файла конфигурации.
Паттерны включения
Repomix поддерживает указание файлов для включения с помощью glob-паттернов. Это позволяет более гибко и мощно выбирать файлы:
- Используйте
**/*.jsдля включения всех JavaScript-файлов в любой директории - Используйте
src/**/*для включения всех файлов в директорииsrcи её поддиректориях - Комбинируйте несколько паттернов, например
["src/**/*.js", "**/*.md"]для включения JavaScript-файлов вsrcи всех Markdown-файлов
Вы можете указать паттерны включения в файле конфигурации:
{
"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. - .repomixignore: Вы можете создать файл
.repomixignoreв корне проекта для определения паттернов игнорирования, специфичных для Repomix. Этот файл следует тому же формату, что и.gitignore. - Пользовательские паттерны: Дополнительные паттерны игнорирования можно указать с помощью параметра
ignore.customPatternsв файле конфигурации. Вы можете переопределить эту настройку с помощью параметра командной строки-i, --ignore.
Порядок приоритета (от высшего к низшему):
- Пользовательские паттерны (
ignore.customPatterns) - Файлы игнорирования (
.repomixignore,.ignore,.gitignoreи.git/info/exclude):- Во вложенных директориях файлы в более глубоких директориях имеют более высокий приоритет
- В одной директории эти файлы объединяются без определённого порядка
- Паттерны по умолчанию (если
ignore.useDefaultPatternsравно true и--no-default-patternsне используется)
Этот подход позволяет гибко настраивать исключение файлов в соответствии с потребностями вашего проекта. Это помогает оптимизировать размер сгенерированного упакованного файла, обеспечивая исключение файлов, чувствительных к безопасности, и больших бинарных файлов, предотвращая утечку конфиденциальной информации.
Примечание: Бинарные файлы не включаются в упакованный вывод по умолчанию, но их пути перечислены в разделе «Repository Structure» выходного файла. Это обеспечивает полный обзор структуры репозитория, сохраняя упакованный файл эффективным и текстовым. См. Обработка бинарных файлов для подробностей.
Пример .repomixignore:
# Директории кэша
.cache/
tmp/
# Выходные файлы сборки
dist/
build/
# Логи
*.logПаттерны игнорирования по умолчанию
Когда ignore.useDefaultPatterns равно true, Repomix автоматически игнорирует типичные паттерны:
node_modules/**
.git/**
coverage/**
dist/**Полный список см. в 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 для интеллектуального извлечения существенных структур кода при удалении деталей реализации. Это помогает уменьшить количество токенов, сохраняя важную структурную информацию.
Ключевые преимущества:
- Значительное уменьшение количества токенов
- Сохранение сигнатур классов и функций
- Сохранение импортов и экспортов
- Сохранение определений типов и интерфейсов
- Удаление тел функций и деталей реализации
Подробнее и примеры см. в Руководстве по сжатию кода.
Уровни детализации для отдельных файлов
В то время как output.compress применяет единый уровень ко всем файлам, output.patterns позволяет управлять уровнем детализации для каждого glob-паттерна из файла конфигурации. Каждая запись выбирает файлы по glob-паттерну (совпадение определяется так же, как для include/ignore) и переопределяет глобальную настройку output.compress для совпавших файлов.
{
"output": {
"compress": false, // глобальное значение по умолчанию действует как универсальное правило
"patterns": [
{ "pattern": "docs/**/*", "compress": true },
{ "pattern": "website/**/*", "directoryStructureOnly": true }
]
}
}Каждый файл получает один из трёх уровней:
- Полное содержимое (по умолчанию): включается полное содержимое файла.
- Сжатый (
compress: true): содержимое проходит через тот же конвейер Tree-sitter, что и приoutput.compress. - Только структура директорий (
directoryStructureOnly: true): файл указывается в структуре директорий, но его блок содержимого полностью исключается из вывода.
Правила:
- Паттерны вычисляются в порядке следования в массиве, и для конкретного файла побеждает первый совпавший паттерн.
- Флаги совпавшего паттерна переопределяют глобальную настройку
output.compress. Паттерн, который совпадает, но не задаёт ни одного флага, принудительно устанавливает полное содержимое для этого файла, что удобно для исключения файлов из глобальногоcompress(whitelisting). directoryStructureOnlyимеет приоритет надcompress, когда оба флага заданы в одном паттерне.- Если ни один паттерн не совпадает, применяется глобальное поведение (полное содержимое или сжатый вариант, когда
output.compressравноtrue).
Эта опция доступна только в файле конфигурации; эквивалентного параметра CLI нет.
Интеграция с Git
Конфигурация output.git предоставляет мощные функции, учитывающие Git:
sortByChanges: Когда true, файлы сортируются по количеству изменений Git (коммитов, изменивших файл). Файлы с большим количеством изменений появляются внизу вывода. Это помогает приоритизировать более активно разрабатываемые файлы. По умолчанию:truesortByChangesMaxCommits: Максимальное количество коммитов для анализа при подсчёте изменений файлов. По умолчанию:100includeDiffs: Когда true, включает различия Git в вывод (включает изменения рабочего дерева и staged отдельно). Это позволяет видеть ожидающие изменения в репозитории. По умолчанию:falseincludeLogs: Когда true, включает историю Git-коммитов в вывод. Показывает даты коммитов, сообщения и пути файлов для каждого коммита. Это помогает ИИ понимать паттерны разработки и связи файлов. По умолчанию:falseincludeLogsCount: Количество последних коммитов для включения в git-логи. По умолчанию:50
Пример конфигурации:
{
"output": {
"git": {
"sortByChanges": true,
"sortByChangesMaxCommits": 100,
"includeDiffs": true,
"includeLogs": true,
"includeLogsCount": 25
}
}
}Проверки безопасности
Когда security.enableSecurityCheck включен, Repomix использует Secretlint для обнаружения конфиденциальной информации в вашей кодовой базе перед включением её в вывод. Это помогает предотвратить случайное раскрытие:
- API-ключей
- Токенов доступа
- Приватных ключей
- Паролей
- Других конфиденциальных учётных данных
Удаление комментариев
Когда output.removeComments установлено в true, комментарии удаляются из поддерживаемых типов файлов для уменьшения размера вывода и фокусировки на существенном содержимом кода. Это может быть особенно полезно, когда:
- Работаете с сильно документированным кодом
- Пытаетесь уменьшить количество токенов
- Фокусируетесь на структуре и логике кода
Поддерживаемые языки и подробные примеры см. в Руководстве по удалению комментариев.
Связанные ресурсы
- Параметры командной строки - Полная справка по CLI (параметры CLI переопределяют настройки файла конфигурации)
- Форматы вывода - Подробности о каждом формате вывода
- Безопасность - Как Repomix обнаруживает конфиденциальную информацию
- Сжатие кода - Уменьшение количества токенов с помощью Tree-sitter
- Обработка GitHub-репозиториев - Опции для удалённых репозиториев