Структура пакета
Структура пакета
Заголовок раздела «Структура пакета»Сторона исходников
Заголовок раздела «Сторона исходников»lh-ui-share/├── src/│ ├── core/ Слой чистых функций компонентов (без импорта фреймворков, гейт CI grep)│ │ ├── <компонент>/ Тройка logic.ts / types.ts / index.ts│ │ └── shared/ Общее ядро для компонентов (12 модулей, унифицированы в виде <name>/index.ts)│ ├── theme/ TS-сторона темы: types + 5 пресетов + runtime-примитивы│ ├── constants/ Константы LH_* (LH_SIZE_DEFAULT / LH_LANGUAGE_DEFAULT …)│ ├── locales/ LhLocale (чистый emitter) + lang/ — скелеты шести языков│ ├── types/ Публичные типы (locale / components)│ ├── utils/ Чистые утилиты (createNamespace / deepMerge …)│ └── index.ts Полный агрегированный вход├── styles/ Единственный источник BEM-стиилей компонентов│ ├── <компонент>/index.scss 58 наборов компонентных стилей│ └── theme/│ ├── common/│ │ ├── var.scss Светлые токены (:root, 185 переменных --lh-*)│ │ ├── var-dark.scss Тёмное переопределение ([data-theme='dark'], .dark, 118 записей)│ │ ├── variables.scss 183 SCSS-переменные $lh-* (!default)│ │ ├── patterns.scss 6 mixin-ов узоров в китайском стиле│ │ ├── transition.scss Три mixin-а переходных классов (собирают различия двух платформ)│ │ └── a11y.scss Вспомогательные стили доступности│ └── index.scss Агрегация темы│ └── index.scss Полная агрегация (токены + все компоненты; генерируется скриптом, не править руками)├── tests/unit/ Единственный экземпляр unit-тестов core (используется тремя библиотеками, копировать не нужно)├── scripts/ Скрипты сборки и проверки├── docs/ Этот сайт документации (Astro Starlight)└── .changeset/ Готовые к публикации changeset-ыНазначение каталогов
Заголовок раздела «Назначение каталогов»| Каталог | Ответственность | Красная линия |
|---|---|---|
src/core/<name>/ |
Чистые функции компонента: вычисление классов / конечные автоматы / набор aria-атрибутов | Запрещены import 'vue' | 'react' | '@dcloudio/*' |
src/core/shared/ |
Ядро, общее для компонентов; напрямую используется на всех платформах | То же; унифицировано в виде <name>/index.ts |
styles/ |
Единый источник BEM-стиилей компонентов | Запрещено копировать стили в UI-библиотеку и править их там; классы lh-*; цвета — только через var(--lh-*, fallback) |
tests/unit/ |
Единственная копия unit-тестов core | UI-библиотеки не должны копировать |
scripts/ |
extract-from-plus (одноразовый) / build-styles / verify-* / release | — |
Методика подсчёта компонентов: 56 или 58
Заголовок раздела «Методика подсчёта компонентов: 56 или 58»Оба числа верны — просто измеряется разное:
| Методика | Число | Источник |
|---|---|---|
| Компоненты с чистыми функциями core | 56 | Каталоги компонентов в src/core/ (без shared/) |
| Наборы компонентных стилей | 58 | Каталоги компонентов в styles/ (без theme/) |
Разница возникает из-за трёх случаев:
| Имя | core | styles | Причина |
|---|---|---|---|
layout |
— | ✅ | Контейнер разметки, логика полностью в слое UI (реактивная разводка брейкпоинтов row/col) |
tree-select |
— | ✅ | Клей селектора на стороне фреймворка; логика древовидных данных переиспользуется из core/tree |
config ↔ config-provider |
config |
config-provider |
Одно и то же под двумя именами каталогов |
Сборочные артефакты
Заголовок раздела «Сборочные артефакты»pnpm build создаёт четыре каталога, и files публикует только их:
| Артефакт | Структура | Описание |
|---|---|---|
es/ |
preserveModules, зеркально повторяет src/ |
ESM, пофайловый импорт по подпутям |
lib/ |
То же | CJS (условие require) |
dist/ |
dist/theme/*.css dist/styles/index.css |
Агрегированные стилевые артефакты |
styles/ |
Публикуется как есть | SCSS-исходники для самостоятельной компиляции в проектах |
Артефакты остаются независимыми от фреймворков: verify:dts сканирует es/**/*.d.ts, и появление любого импорта фреймворка приводит к неудаче.
Как выглядит артефакт одного компонента (на примере button)
Заголовок раздела «Как выглядит артефакт одного компонента (на примере button)»es/button/├── index.d.ts Типы├── index.js ESM├── logic.d.ts├── logic.js├── types.d.ts└── style/ ├── index.css Скомпилированные стили компонента (форма, как на платформе plus) └── index.scss Исходники (@use переписан в bare specifier, распространяется вместе с артефактами)lib/button/ имеет ту же структуру. UI-библиотеки двух платформ оборачивают это ещё одним слоем es/components/<name>/style/index.css
(платформа vue2 публикует только css, без scss).
Copyright © 2024-2026 FengMo WenXue