Skip to main content

Структура пакета

Этот документ описывает конфигурацию пакета @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 Это обеспечивает единую поверхность импорта:
Источники: package.json31-37

Файлы дистрибутива

Пакет распространяет только необходимые файлы, настроенные через поле files:

Манифест дистрибутива

Массив files package.json39-43 явно включает только скомпилированный каталог dist/ и файлы документации. Исходные файлы в src/, скрипты сборки и конфигурация разработки исключены из опубликованного пакета. Файл .gitignore .gitignore9-10 исключает dist/ из системы контроля версий, так как он содержит сгенерированные артефакты. Во время публикации в NPM процесс сборки генерирует dist/ и включает его в tarball пакета. Источники: package.json39-43 .gitignore9-10

Зависимости

Зависимости организованы в три категории в зависимости от того, когда и как они требуются:

Зависимости времени выполнения

Зависимости времени выполнения package.json48-54 включены в пакет и устанавливаются автоматически: Эти зависимости появляются в метаданных компонентов в src/registry.json Например, Sheet указывает lucide-react src/registry.json54-55 а DashLayout указывает и lucide-react, и react-resizable-panels src/registry.json266-267

Peer-зависимости

Peer-зависимости package.json55-58 должны быть предоставлены потребляющим приложением:
Диапазон версий поддерживает как React 18, так и 19, обеспечивая гибкость для приложений во время миграции на React 19. Библиотека не включает React в себя, избегая конфликтов версий и дублирования экземпляров React.

Зависимости разработки

Зависимости разработки 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 и exports package.json31-37
  • Устанавливает файлы, указанные в массиве files package.json39-43
  • Устанавливает все зависимости времени выполнения package.json48-54
  • Требует peer-зависимости package.json55-58
Место установки: node_modules/@ui8kit/core/

Метод 2: Установка по компонентам

Использует реестр компонентов:
  • Читает метаданные компонентов из src/registry.json src/registry.json3-276
  • Устанавливает только указанные файлы компонентов в components/ui/ или layouts/
  • Устанавливает зависимости, специфичные для компонента (например, lucide-react для Sheet)
Команда: npx buildy-ui add [component]

Метод 3: Git Submodule

Использует URL репозитория:
  • Клонирует репозиторий через repository.url package.json45
  • Предоставляет доступ к полному дереву исходного кода в src/
  • Требует ручного управления зависимостями
Место установки: packages/@ui8kit/core/ (типичный паттерн монорепозитория)

Метод 4: Прямое копирование исходного кода

Использует исходные файлы напрямую:
  • Копирует src/components/ или конкретные компоненты
  • Требует ручной установки зависимостей
  • Позволяет делать кастомные модификации
Место установки: каталог src/ приложения Источники: package.json31-58 src/registry.json1-281

Конфигурация репозитория

Поле repository обеспечивает обнаружение исходного кода и интеграции на основе git:
Эта конфигурация package.json44-47:
  • Связывает NPM-пакет с GitHub-репозиторием
  • Включает команду npm repo для открытия репозитория
  • Поддерживает интеграцию git submodule через git submodule add https://github.com/ui8kit/core.git
  • Обеспечивает видимость исходного кода для прозрачности (требование лицензии GPL-3.0)
Источники: package.json44-47

Конфигурация публикации

Секция publishConfig контролирует поведение публикации в NPM:
Настройка access: "public" package.json67-69 требуется для того, чтобы пакеты с областью видимости (@ui8kit/core) были публично доступны в реестре NPM. Без этой конфигурации пакеты с областью видимости по умолчанию имеют приватный доступ. Источники: package.json67-69