Структура пакета
Этот документ описывает конфигурацию пакета@ui8kit/core, включая точки входа, экспорты модулей, зависимости и настройку дистрибутива. Он объясняет, как конфигурация package.json поддерживает множество методов интеграции (установка через NPM, установка отдельных компонентов через buildy-ui CLI, git submodules и прямое копирование исходного кода).
Для информации о процессе сборки, который генерирует файлы дистрибутива, см. Система сборки. Для деталей о системе реестра компонентов см. Реестр компонентов.
Метаданные пакета
Пакет настроен как библиотека ES-модулей, нацеленная на современные среды JavaScript.
Объявление
type: "module" package.json8 гарантирует, что все .js файлы обрабатываются как ES-модули, требуя явных расширений .js в операторах импорта. Флаг sideEffects: false package.json30 указывает, что пакет содержит чистые модули без побочных эффектов, позволяя сборщикам безопасно удалять неиспользуемый код.
Источники: package.json1-30
Точки входа и экспорты модулей
Пакет определяет единственную точку входа по умолчанию с разрешением в двух форматах:Разрешение точки входа
main package.json31 обеспечивает обратную совместимость для старых инструментов, в то время как поле exports package.json33-37 предоставляет современные условные экспорты. Условие types гарантирует, что TypeScript правильно разрешает определения типов для обеих стратегий разрешения.
Все компоненты экспортируются из единого barrel-файла в src/index.tsx который компилируется в dist/index.js Это обеспечивает единую поверхность импорта:
Файлы дистрибутива
Пакет распространяет только необходимые файлы, настроенные через полеfiles:
Манифест дистрибутива
files package.json39-43 явно включает только скомпилированный каталог dist/ и файлы документации. Исходные файлы в src/, скрипты сборки и конфигурация разработки исключены из опубликованного пакета.
Файл .gitignore .gitignore9-10 исключает dist/ из системы контроля версий, так как он содержит сгенерированные артефакты. Во время публикации в NPM процесс сборки генерирует dist/ и включает его в tarball пакета.
Источники: package.json39-43 .gitignore9-10
Зависимости
Зависимости организованы в три категории в зависимости от того, когда и как они требуются:Зависимости времени выполнения
Эти зависимости появляются в метаданных компонентов в src/registry.json Например, Sheet указывает
lucide-react src/registry.json54-55 а DashLayout указывает и lucide-react, и react-resizable-panels src/registry.json266-267
Peer-зависимости
Зависимости разработки
Зависимости разработки package.json59-66 используются только во время разработки и тестирования библиотеки:
React и ReactDOM присутствуют как в
peerDependencies, так и в devDependencies. Версии devDependencies используются для локальной разработки, в то время как peerDependencies объявляют требования совместимости для потребителей.
Источники: package.json48-66 src/registry.json54-55 src/registry.json266-267
Скрипты сборки
Секцияscripts определяет команды для рабочих процессов разработки и публикации:
Поток скриптов сборки
Скрипт
build package.json22 является основной командой компиляции, генерирующей ES2022-модули и объявления TypeScript в dist/. Скрипт scan package.json26 обновляет src/registry.json метаданными компонентов, обеспечивая установку отдельных компонентов через npx buildy-ui add [component].
Источники: package.json21-28
Поддерживаемые методы интеграции
Структура пакета поддерживает четыре различных метода интеграции, каждый из которых использует разные аспекты конфигурации пакета:Матрица методов интеграции
Метод 1: Полная установка через NPM
Использует полную конфигурацию пакета:- Разрешает точки входа через поля
mainиexportspackage.json31-37 - Устанавливает файлы, указанные в массиве
filespackage.json39-43 - Устанавливает все зависимости времени выполнения package.json48-54
- Требует peer-зависимости package.json55-58
node_modules/@ui8kit/core/
Метод 2: Установка по компонентам
Использует реестр компонентов:- Читает метаданные компонентов из
src/registry.jsonsrc/registry.json3-276 - Устанавливает только указанные файлы компонентов в
components/ui/илиlayouts/ - Устанавливает зависимости, специфичные для компонента (например,
lucide-reactдля Sheet)
npx buildy-ui add [component]
Метод 3: Git Submodule
Использует URL репозитория:- Клонирует репозиторий через
repository.urlpackage.json45 - Предоставляет доступ к полному дереву исходного кода в
src/ - Требует ручного управления зависимостями
packages/@ui8kit/core/ (типичный паттерн монорепозитория)
Метод 4: Прямое копирование исходного кода
Использует исходные файлы напрямую:- Копирует
src/components/или конкретные компоненты - Требует ручной установки зависимостей
- Позволяет делать кастомные модификации
src/ приложения
Источники: package.json31-58 src/registry.json1-281
Конфигурация репозитория
Полеrepository обеспечивает обнаружение исходного кода и интеграции на основе git:
- Связывает NPM-пакет с GitHub-репозиторием
- Включает команду
npm repoдля открытия репозитория - Поддерживает интеграцию git submodule через
git submodule add https://github.com/ui8kit/core.git - Обеспечивает видимость исходного кода для прозрачности (требование лицензии GPL-3.0)
Конфигурация публикации
СекцияpublishConfig контролирует поведение публикации в NPM:
access: "public" package.json67-69 требуется для того, чтобы пакеты с областью видимости (@ui8kit/core) были публично доступны в реестре NPM. Без этой конфигурации пакеты с областью видимости по умолчанию имеют приватный доступ.
Источники: package.json67-69