import {Meta} from '@storybook/addon-docs/blocks'

<Meta title='@dxtmisha/ru/scripts/bin/dxt-build-packages - Сборка пакетов'/>

# dxt-build-packages

Команда `dxt-build-packages` обеспечивает автоматическую сборку измененных npm-пакетов в рабочем пространстве. Инструмент использует `BuildPackages` и `PackageFile` для сканирования активных директорий библиотек, отслеживания версий и инкрементальной компиляции пакетов при обнаружении изменений.

## Ключевые возможности

- **Автоматическое сканирование монорепозитория**: Обнаруживает активные директории пакетов внутри папки `/packages/`, содержащие корректный файл `package.json`.
- **Инкрементальное кэширование на основе версий**: Избегает избыточных сборок благодаря ведению локального кэша сборок в файле `./logs/ui-build.log.json`. Сборка пакета запускается только в том случае, если его текущая версия в `package.json` изменилась по сравнению с сохраненной в кэше.
- **Интеллектуальный выбор скриптов**: Автоматически выполняет скрипт `"build-recovery"`, если он определен в скриптах пакета, с переходом на стандартный скрипт `"build"`, если первый отсутствует.
- **Исключение тестовых пакетов**: Автоматически пропускает пакеты, помеченные как тестовые (содержащие `"ui-test": true` в `package.json`).

## Как это работает?

Процесс компиляции пакетов автоматизирует проверки и вызовы команд сборки:

1. **Сканирование директорий**: Класс `BuildPackages` сканирует целевую директорию пакетов (по умолчанию `/packages/`) и считывает файл кэша сборок `./logs/ui-build.log.json`.
2. **Фильтрация и валидация**: Для каждой папки создается обертка `PackageFile` для проверки того, что она является пакетом, не является тестовым пакетом, и что ее текущая версия отличается от версии, записанной в кэше.
3. **Выполнение сборки**: Если требуется обновление, инструмент проверяет скрипты в `package.json`:
   - Если существует скрипт `"build-recovery"`, выполняется `npm run build-recovery`.
   - В противном случае, если существует скрипт `"build"`, выполняется `npm run build`.
4. **Синхронизация логов**: После успешной компиляции пакета его версия обновляется в кэше в оперативной памяти.
5. **Сохранение логов**: Если один или несколько пакетов были успешно собраны, обновленный кэш сохраняется обратно в `./logs/ui-build.log.json`.

## Дополнительная информация

### Файл кэширования логов (`ui-build.log.json`)

Локальный кэш хранится по пути:
```
./logs/ui-build.log.json
```
Если вы хотите принудительно пересобрать все пакеты независимо от их версий, вы можете удалить этот файл или сбросить его содержимое до пустых скобок `{}`.

### Исключение тестовых пакетов

Если вы хотите, чтобы сборщик игнорировал конкретный пакет, добавьте следующее свойство в его файл `package.json`:
```json
{
  "ui-test": true
}
```
