Turborepo vs Nx в 2026: что выбрать
Когда монорепо вырастает за пределы 5-7 пакетов, скорость сборки и тестов начинает кусаться. Решение очевидное — кеширование и параллелизация. На рынке два больших инструмента: Turborepo и Nx. Они закрывают одну и ту же задачу, но делают это очень по-разному. Я работал с обоими в продакшене и расскажу, как выбрать.
Что общего
- Оба инкрементально строят зависимости и запускают только то, что изменилось.
- Оба умеют локальный и распределённый кеш.
- Оба запускают задачи параллельно, учитывая зависимости.
- Оба интегрируются с pnpm/npm/yarn workspaces.
Если у тебя репо из 3-5 пакетов, оба будут работать почти одинаково. Разница начинается, когда репо разрастается.
Turborepo: фокус на кеше и простоте
Turborepo — это инструмент, который делает одну вещь хорошо: считает граф задач и кеширует. Минимум настроек, максимум скорости.
Базовый turbo.json:
{
"$schema": "https://turbo.build/schema.json",
"tasks": {
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**", ".next/**"]
},
"test": {
"dependsOn": ["build"],
"outputs": ["coverage/**"]
},
"lint": {},
"dev": {
"cache": false,
"persistent": true
}
}
}Запуск:
turbo run build
turbo run test --filter=@my-mono/web
turbo run lint --filter=...[origin/main]Это всё. Кеш работает локально автоматически, удалённый — через интеграцию с Vercel Remote Cache (бесплатно для open-source и недорого для коммерческого использования).
Nx: полноценная платформа
Nx — это больше, чем просто запуск задач. Это:
- Граф задач и кеш (как у Turborepo).
- Генераторы (создать новый пакет, компонент, сервис одной командой).
- Шаблоны для популярных стеков (React, Next, NestJS, Vue, Angular).
- Анализ зависимостей с визуальным графом.
- Свой облачный кеш — Nx Cloud.
- Распределённое выполнение (Distributed Task Execution).
Базовый nx.json:
{
"targetDefaults": {
"build": {
"dependsOn": ["^build"],
"cache": true,
"outputs": ["{projectRoot}/dist"]
},
"test": {
"dependsOn": ["^build"],
"cache": true
}
},
"defaultBase": "main"
}В каждом проекте — project.json со своими настройками задач. Nx сам понимает, что и как запускать.
Когда я беру Turborepo
- Простой монорепо без сложных потребностей.
- Команда хочет минимум вкатывания: «просто включить и работает».
- Уже используется Vercel — интеграция с Remote Cache бесшовная.
- Не хочется тащить в проект кодогенерацию и шаблоны.
На прошлом проекте мы выбрали Turborepo, и через две недели разработчик-новичок уже добавлял свои пакеты и запускал задачи без помощи. Конфиг — 30 строк, и больше я в него не лазил полгода.
Когда я беру Nx
- Большой монорепо (15+ пакетов), где нужны генераторы и шаблоны.
- Команда привыкла к Angular CLI или похожим инструментам.
- Нужно распределённое выполнение тестов на нескольких машинах.
- Хочется сильную интеграцию с конкретным фреймворком (особенно Angular, NestJS).
На большом проекте Nx экономит часы, потому что генератор «новый сервис» за минуту создаёт корректную структуру с тестами, dockerfile, CI-настройками. Но эта мощь требует времени на освоение — Nx CLI с десятками команд, и в начале команда теряется.
Скорость сборки
Турборепо запускает задачи быстрее «из коробки» в простых сценариях. На моём бенчмарке:
- Холодный билд 12 пакетов: Turborepo ~36 с, Nx ~42 с.
- Инкрементальный билд (изменён 1 пакет): Turborepo ~3.2 с, Nx ~4.1 с.
- Из удалённого кеша: оба около 1.5-2 с.
На больших монорепо (40+ пакетов) Nx иногда выигрывает за счёт более точного анализа зависимостей. Turborepo — стабильно прост и предсказуем.
Удалённый кеш
Turborepo интегрируется с Vercel Remote Cache. Один токен — и весь CI начинает шарить кеш с локальной разработкой. Бесплатно для команды до 10 человек.
Nx Cloud работает аналогично, но имеет дополнительные функции: распределённое выполнение тестов, аналитика по задачам, agent-based execution для CI. Платная — после первых 500 минут в месяц.
Если у тебя есть бюджет и большой CI — Nx Cloud стоит своих денег за счёт распределённого выполнения. Если бюджета нет или хочется простоты — Turborepo.
Кодогенерация
У Nx есть nx generate, и это сильное преимущество. Пример:
nx generate @nx/react:library ui-button --directory=packages/ui-button
nx generate @nx/next:page user --project=webЗа одну команду создаётся пакет с правильным tsconfig, тестами, ESLint, Storybook. На большом проекте это экономит дни.
В Turborepo генерации нет — ты сам копируешь шаблонный пакет или пишешь скрипт. Многие так и делают: один скрипт scripts/new-package.ts закрывает 80% потребностей.
Кривая обучения
Turborepo: за день любой разработчик понимает, как с ним работать. Концептов мало.
Nx: освоение занимает неделю-две. CLI большой, есть проектная конфигурация, генераторы, plugin-система. Новый разработчик в команде первое время ходит «спрашивать у Nx-знатока».
Совместимость
Turborepo не диктует структуру проекта. Используешь pnpm workspaces, обычные пакеты, любые сборщики — всё работает.
Nx предпочитает свою структуру (через nx init) и кладёт project.json в каждый проект. Можно использовать в standalone-режиме без структуры Nx, но многие фичи теряются.
Грабли
В Turborepo: outputs в turbo.json нужно вручную поддерживать в актуальном виде. Если задача создаёт файлы вне списка, кеш этого не учитывает. Проверяй после каждого изменения сборки.
В Nx: проектная конфигурация быстро разрастается. На крупном репо у меня было 30+ project.json с похожими настройками — пришлось писать свой migrate-скрипт. Помогает nx migrate, но не всегда покрывает custom-конфиги.
Миграция между ними
Я переезжал в обе стороны.
С Turborepo на Nx — тяжёлая миграция. Нужно перевести структуру проекта, добавить project.json, переписать команды. Заняло у меня неделю на репо из 18 пакетов.
С Nx на Turborepo — проще. Удаляешь Nx-специфичные файлы, добавляешь turbo.json, пишешь два-три скрипта замены генераторов. День-два работы.
В сухом остатке
Если ты только начинаешь — бери Turborepo. Дальше посмотришь, когда упрёшься в потолок.
Если у тебя уже большой проект и нужны генераторы, шаблоны, распределённое выполнение — Nx, и не стесняйся учить команду.
Если ты в экосистеме Vercel — Turborepo стыкуется почти бесплатно.
Если ты в Angular-экосистеме — Nx был, есть и будет лучшим выбором.
Что копать дальше
Прежде чем выбирать, подумай о CI. Скорость сборки в монорепо в первую очередь зависит от удалённого кеша. Без него и Turborepo, и Nx показывают примерно одинаковые цифры. С кешем — оба значительно ускоряются. Платный план — реальная инвестиция, которая окупается на средне-большой команде.