Монорепозитории для уставших
Другие платформы:
Монорепин — это таск-раннер для монорепозиториев. Он сам находит все пакеты в репозитории, разбирается в зависимостях между ними и запускает задачи. Причём делает это умно: если ничего не поменялось — лишнего не пересобирает.
Корень репозитория — это папка, где лежит файл monorepin.json. Монорепин ищет его, поднимаясь вверх от текущей директории. Так он понимает, где начинается ваш монорепозиторий.
Пакет — это подпапка с файлом repin.json. Внутри описаны задачи для этого пакета. Имя пакета — это просто название папки.
monorepin.json — маркер корня репозитория. Пока что он просто нужен, чтобы Монорепин знал, где остановиться:
{}
repin.json — конфиг пакета. Тут вы описываете задачи, команды и зависимости:
{
"tasks": {
"build": { "cmd": "npm run build" },
"test": {
"cmd": "npm test",
"deps": ["build"]
}
}
}
Монорепин обходит всё дерево директорий от корня и ищет файлы repin.json. При этом он автоматически пропускает всякий мусор:
node_modules, vendor, _build, .git, _opam, target, dist, build
Любая папка с repin.json внутри становится пакетом.
# Запустить задачу в конкретном пакете repin package:task # Запустить задачу во ВСЕХ пакетах repin :build # Несколько задач подряд repin lib:build api:build # Посмотреть, что бы запустилось (без реального запуска) repin --dry-run :test # Пересобрать всё, даже если ничего не менялось repin --force :build
| Поле | Обязательно | Что делает |
|---|---|---|
cmd |
Да | Команда для выполнения |
deps |
Нет | Список зависимостей: ["build"] или ["other_pkg:build"] |
always_run |
Нет | Если true — задача выполняется всегда, даже если ничего не менялось |
Монорепин запоминает состояние пакетов в .monorepin/state.json. Если пакет не менялся с последнего успешного запуска — задача пропускается. Если это не то, что вам нужно — добавьте "always_run": true или запустите с флагом --force.
Монорепин может работать как MCP-сервер (Model Context Protocol). Это позволяет ИИ-ассистентам вроде Claude взаимодействовать с вашим монорепозиторием — смотреть пакеты, задачи, зависимости и запускать сборки.
# Запустить как MCP-сервер repin --mcp # Добавить в Claude Code CLI claude mcp add --transport stdio monorepin -- repin --mcp
Доступные инструменты: list_packages, list_tasks, get_task_info, get_dependency_graph, get_state, get_affected_packages, run_task.
Исходники: git.sr.ht/~nvkv/monorepin