Структура пакета
Этот документ описывает конфигурацию пакета@ui8kit/core, включая точки входа, экспорты модулей, зависимости и настройку дистрибутива. Он объясняет, как конфигурация package.json поддерживает множество методов интеграции (установка через NPM, установка отдельных компонентов через buildy-ui CLI, git submodules и прямое копирование исходного кода).
Для информации о процессе сборки, который генерирует файлы дистрибутива, см. Система сборки. Для деталей о системе реестра компонентов см. Реестр компонентов.
Метаданные пакета
Пакет настроен как библиотека ES-модулей, нацеленная на современные среды JavaScript.| Свойство | Значение | Назначение |
|---|---|---|
name | @ui8kit/core | Идентификатор NPM-пакета с областью видимости |
version | 0.1.8 | Семантическая версия (MAJOR.MINOR.PATCH) |
type | "module" | Объявляет формат ES-модулей (не CommonJS) |
license | GPL-3.0 | Лицензия с открытым исходным кодом |
homepage | https://buildy.tw/ | Сайт документации и инструментов |
sideEffects | false | Включает оптимизацию tree-shaking |
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
Зависимости
Зависимости организованы в три категории в зависимости от того, когда и как они требуются:Зависимости времени выполнения
| Зависимость | Версия | Используется в | Назначение |
|---|---|---|---|
class-variance-authority | ^0.7.1 | Все компоненты | Система вариантов на основе CVA |
clsx | ^2.1.1 | Все компоненты | Условное построение className |
lucide-react | ^0.525.0 | Sheet, Accordion, DashLayout | Отрисовка иконок (X, ChevronDown и т.д.) |
react-resizable-panels | ^3.0.6 | DashLayout | Изменяемые размеры боковых панелей |
tailwind-merge | ^3.3.1 | Все компоненты | Дедупликация конфликтующих классов Tailwind |
lucide-react src/registry.json54-55 а DashLayout указывает и lucide-react, и react-resizable-panels src/registry.json266-267
Peer-зависимости
Зависимости разработки
Зависимости разработки package.json59-66 используются только во время разработки и тестирования библиотеки:| Зависимость | Версия | Назначение |
|---|---|---|
react | ^19.1.0 | Разработка и тестирование |
react-dom | ^19.1.0 | Разработка и тестирование |
bun-types | ^1.1.29 | Типы для среды выполнения Bun |
typescript | ^5.6.3 | Компиляция TypeScript |
@babel/parser | ^7.28.4 | Скрипт извлечения CVA |
@babel/traverse | ^7.28.4 | Скрипт извлечения CVA |
peerDependencies, так и в devDependencies. Версии devDependencies используются для локальной разработки, в то время как peerDependencies объявляют требования совместимости для потребителей.
Источники: package.json48-66 src/registry.json54-55 src/registry.json266-267
Скрипты сборки
Секцияscripts определяет команды для рабочих процессов разработки и публикации:
Поток скриптов сборки
| Скрипт | Команда | Назначение |
|---|---|---|
build | tsc -p tsconfig.json | Компилирует TypeScript в dist/ |
type-check | tsc --noEmit | Проверяет типы без генерации файлов |
lint | eslint src --ext .ts,.tsx | Проверяет качество кода |
lint:fix | eslint src --ext .ts,.tsx --fix | Автоматически исправляет проблемы линтинга |
scan | bunx buildy-ui@latest scan | Обновляет метаданные реестра компонентов |
build:r | bunx buildy-ui@latest build | Собирает пакет реестра |
publish | cd packages/registry && npm version patch && npm publish | Публикует в NPM |
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