Инкрементальные сборки и кэш в монорепозиториях
Оптимизируйте время сборки с помощью инкрементальной компиляции и Turborepo
«Инкрементальные сборки и кэш в монорепозиториях» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.
Зачем нужны инкрементальные сборки
В больших монорепозиториях медленно пересобирать каждый пакет после каждого изменения. Инкрементальные сборки определяют, что изменилось, и перекомпилируют только затронутые пакеты.
# Without incremental: all 20 packages rebuild every time
# With incremental: only 2 changed packages rebuildИнкрементальный режим TypeScript
Включите "incremental": true в tsconfig, чтобы создать файл .tsbuildinfo, кэширующий состояние предыдущей сборки для быстрых повторных запусков.
{
"compilerOptions": {
"incremental": true,
"tsBuildInfoFile": "./.tsbuildinfo"
}
}tsc --build для ссылок на проекты
tsc --build по своей сути выполняет инкрементальную сборку рабочих областей со ссылками на проекты: он отслеживает временные метки и пропускает актуальные пакеты.
# First build: all packages compiled
tsc --build
# Second build: only changed packages compiled
tsc --build
# [12:00:01 PM] Project 'packages/core' is up to dateКэширование в Turborepo
Turborepo кэширует результаты задач, например dist/, и восстанавливает их из кэша при неизменившихся входных данных — для всей команды через удалённый кэш.
// turbo.json
{
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**", ".tsbuildinfo"]
}
}
}Удалённое кэширование с Turborepo
Общий кэш сборки для машин CI и участников команды позволяет не пересобирать то, что уже собрал кто-то другой.
# Link to Vercel remote cache
npx turbo login
npx turbo linkКэш вычислений Nx
Nx предоставляет аналогичное кэширование с детальным анализом затронутых компонентов на основе графа зависимостей проектов.
# Nx: only test affected projects
npx nx affected --target=test --base=mainВходные и выходные данные кэша
Для корректного кэширования объявляйте все входные данные (исходные файлы, переменные окружения) и выходные данные (каталоги dist, tsbuildinfo) в конфигурации инструмента сборки.
// turbo.json with inputs
{
"pipeline": {
"build": {
"inputs": ["src/**", "tsconfig.json"],
"outputs": ["dist/**"]
}
}
}Инвалидация кэша
Кэш становится недействительным при изменении входных данных. Не включайте изменчивые файлы, например журналы или временные метки, во входные данные, чтобы не вызывать ненужные пересборки.
# Force rebuild even if cached
turbo run build --forceИнтеграция с CI
Подключите CI (GitHub Actions, CircleCI) к удалённому кэшу, чтобы сборки PR выполнялись быстро за счёт повторного использования артефактов предыдущих сборок.
# .github/workflows/ci.yml
- name: Build
run: npx turbo build
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: my-teamТолько инкрементальная проверка типов
Используйте tsc --noEmit --incremental для быстрых этапов CI, проверяющих только типы: они пропускают вывод, но по-прежнему используют преимущества кэширования.
npx tsc --noEmit --incremental
# Quick type check with .tsbuildinfo cacheИтоги: инкрементальные сборки
Инкрементальные сборки в монорепозиториях используют tsBuildInfo TypeScript и tsc --build вместе с кэшированием Turborepo или Nx, чтобы минимизировать объём компиляции при каждом изменении.
Быстрая проверка
Какой файл создаёт TypeScript для включения инкрементальных сборок?
Чему Вы научились
Инкрементальные сборки используют файл TypeScript .tsbuildinfo и tsc --build, чтобы пропускать неизменившиеся пакеты. Turborepo и Nx расширяют этот подход удалённым кэшированием и анализом только затронутых компонентов во всём монорепозитории.
Часто задаваемые вопросы
Урок «Инкрементальные сборки и кэш в монорепозиториях» бесплатный?
Да — полный текст урока «Инкрементальные сборки и кэш в монорепозиториях» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.
Чему я научусь в уроке «Инкрементальные сборки и кэш в монорепозиториях»?
Оптимизируйте время сборки с помощью инкрементальной компиляции и Turborepo Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать TypeScript Academy?
Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Инкрементальные сборки и кэш в монорепозиториях»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке TypeScript Academy?
Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Объяснение ссылок на проекты TypeScript
- Рабочие пространства pnpm с TypeScript
- Стратегия общего пакета типов
- Инкрементальные сборки и кэш в монорепозиториях