Система сборки
Цель и область применения
Этот документ описывает систему сборки, которая компилирует исходный код TypeScript в распространяемые JavaScript-модули для публикации в NPM. Он объясняет процесс компиляции, скрипты сборки, конфигурацию TypeScript, структуру выходных данных и настройку распространения. Информацию о структуре пакета и экспорте модулей см. в разделе Структура пакета. Подробности о системе реестра компонентов, которая обеспечивает установку отдельных компонентов, см. в разделе Реестр компонентов. Для деталей, специфичных для TypeScript, включая псевдонимы путей и генерацию типов, см. Конфигурация TypeScript.Обзор конвейера сборки
Система сборки преобразует исходный код TypeScript вsrc/ в JavaScript-модули ES2022 с файлами объявлений в dist/, а также в генерируемые артефакты, которые поддерживают Tailwind CSS и инструменты сборки.
Команды сборки
Система сборки предоставляет несколько npm-скриптов, определенных вpackage.json, для различных аспектов сборки и рабочего процесса разработки.
Основные команды сборки
Команды инструментов
Ручные скрипты сборки
Источники: package.json21-28
Процесс компиляции TypeScript
Компилятор TypeScript (tsc) преобразует исходные файлы из src/ в скомпилированные JavaScript-модули и файлы объявлений в dist/, используя конфигурацию, определенную в tsconfig.json.
Конфигурация компиляции
Компилятор TypeScript настроен в tsconfig.json1-26 со следующими ключевыми параметрами:Псевдонимы путей
Компилятор разрешает псевдонимы путей во время компиляции:Структура вывода
Процесс компиляции генерирует структурированный вывод в каталогеdist/, который отражает структуру исходного кода.
Схема каталога распространения
Структура точки входа
Главная точка входа в src/index.ts1-32 определяет публичный API через серию экспортов:dist/index.js со всеми импортами, разрешенными в относительные пути.
Генерируемые типы файлов
Источники: src/index.ts1-32 tsconfig.json13-19 package.json31-37
Конфигурация распространения
Пакет настроен для распространения через NPM с помощью параметров вpackage.json, которые определяют, как скомпилированный код предоставляется потребителям.
Конфигурация экспорта модулей
Пакет определяет свои экспорты, используя современное полеexports:
main: Точка входа по умолчанию для CommonJS и старых инструментовtypes: Расположение файла объявлений TypeScriptexports["."]: Современные условные экспорты для ESM и типов
Файлы распространения пакета
Полеfiles в package.json39-43 указывает, какие файлы включены в опубликованный пакет:
Метаданные пакета
Источники: package.json1-43 package.json67-69
Инструменты времени сборки
Система сборки включает специализированные скрипты, которые выполняются во время разработки для генерации артефактов, необходимых для системы времени выполнения и приложений потребителей.Экстрактор классов CVA
Скрипт scripts/cva-extractor.ts1-339 анализирует определения вариантов для извлечения CSS-классов, используемых библиотекой.Реализация экстрактора
КлассSimpleCVAExtractor обрабатывает файлы вариантов:
-
Обнаружение файлов: Рекурсивно сканирует src/core/variants/ для файлов
.tsи.tsx -
Парсинг AST: Использует
@babel/parserдля парсинга синтаксиса TypeScript -
Обнаружение CVA: Находит вызовы функции
cva()через обход AST -
Извлечение классов: Извлекает все строковые литералы из:
- Базовых классов (первый аргумент)
- Объектов вариантов (свойства второго аргумента)
- Вложенных определений вариантов
-
Дедупликация: Использует
Set<string>для обеспечения уникальности - Генерация вывода: Записывает JSON-массив из 618 классов
Генерируемый белый список классов
Экстрактор создает src/lib/core-classes.json1-624 со следующей структурой:- Safelist Tailwind: Предотвращает удаление классов, генерируемых вариантами, при очистке CSS
- Конфигурация tw-merge: Обеспечивает безопасное слияние классов, генерируемых вариантами
Сканер реестра компонентов
Командаbuildy-ui scan генерирует src/registry.json анализируя файлы компонентов на предмет метаданных, используемых системой установки отдельных компонентов. Подробности см. в разделе Реестр компонентов.
Источники: scripts/cva-extractor.ts11-279 src/lib/core-classes.json1-624 Диаграмма 2 и Диаграмма 5 из высокоуровневой архитектуры
Артефакты сборки
Процесс сборки генерирует несколько зафиксированных артефактов, которые соединяют системы времени сборки и времени выполнения.Сводка артефактов
Детали артефактов
Почему артефакты зафиксированы
Артефакты сборки зафиксированы в репозитории (в отличие от типичных проектов Node.js) по нескольким причинам:- Готовность к NPM: Каталог
dist/может быть опубликован напрямую без необходимости выполнения шагов сборки потребителями - Совместимость с подмодулями: Установки подмодулей Git могут использовать скомпилированный вывод без инструментов сборки
- Стабильность белого списка: Файл
core-classes.jsonслужит версионированным контрактом для конфигураций Tailwind - Доступность реестра:
registry.jsonобеспечивает установку отдельных компонентов без необходимости полной установки пакета
Пример рабочего процесса сборки
Типичный рабочий процесс разработки включает последовательное выполнение команд сборки:Полная последовательность сборки
Сборка для разработки
Для итеративной разработки выполните минимальную сборку:Непрерывная интеграция
Конвейер CI/CD обычно выполняет:Зависимости и требования
Система сборки требует определенных инструментов и зависимостей для корректной работы.Зависимости времени сборки
Зависимости времени выполнения
Они включены в пакет:Одноранговые зависимости
Приложения-потребители должны предоставить:
Источники: package.json48-66