Skip to content

Конфигурация

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-паттернов[]
ignore.useGitignoreИспользовать ли паттерны из файла .gitignore проектаtrue
ignore.useDotIgnoreИспользовать ли паттерны из файла .ignore проектаtrue
ignore.useDefaultPatternsИспользовать ли паттерны игнорирования по умолчанию (node_modules, .git и т.д.)true
ignore.customPatternsДополнительные паттерны для игнорирования с использованием glob-паттернов[]
security.enableSecurityCheckВыполнять ли проверки безопасности с помощью Secretlint для обнаружения конфиденциальной информацииtrue
tokenCount.encodingКодировка подсчёта токенов, используемая токенизатором OpenAI tiktoken. Используйте o200k_base для GPT-4o, cl100k_base для GPT-4/3.5. См. tiktoken model.py для деталей."o200k_base"

Файл конфигурации поддерживает синтаксис JSON5, который позволяет:

  • Комментарии (как однострочные, так и многострочные)
  • Завершающие запятые в объектах и массивах
  • Имена свойств без кавычек
  • Более гибкий синтаксис строк

Валидация схемы

Вы можете включить валидацию схемы для вашего файла конфигурации, добавив свойство $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-паттернов. Это позволяет более гибко и мощно выбирать файлы:

  • Используйте **/*.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.
  • .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

Обработка бинарных файлов

Бинарные файлы (такие как изображения, 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 для интеллектуального извлечения существенных структур кода при удалении деталей реализации. Это помогает уменьшить количество токенов, сохраняя важную структурную информацию.

Ключевые преимущества:

  • Значительное уменьшение количества токенов
  • Сохранение сигнатур классов и функций
  • Сохранение импортов и экспортов
  • Сохранение определений типов и интерфейсов
  • Удаление тел функций и деталей реализации

Подробнее и примеры см. в Руководстве по сжатию кода.

Интеграция с 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 для обнаружения конфиденциальной информации в вашей кодовой базе перед включением её в вывод. Это помогает предотвратить случайное раскрытие:

  • API-ключей
  • Токенов доступа
  • Приватных ключей
  • Паролей
  • Других конфиденциальных учётных данных

Удаление комментариев

Когда output.removeComments установлено в true, комментарии удаляются из поддерживаемых типов файлов для уменьшения размера вывода и фокусировки на существенном содержимом кода. Это может быть особенно полезно, когда:

  • Работаете с сильно документированным кодом
  • Пытаетесь уменьшить количество токенов
  • Фокусируетесь на структуре и логике кода

Поддерживаемые языки и подробные примеры см. в Руководстве по удалению комментариев.

Released under the MIT License.