mdt-module-builder
v1.0.1
Published
Сборщик внешних UI-модулей MDT (Vite).
Downloads
276
Readme
mdt-module-builder
Сборщик внешнего UI-модуля MDT билдером MDT (Vite). Заменяет webpack/ics-builder в npm run build
модуля, выдавая тот же по контракту артефакт: один dist/index.js (IIFE), который при загрузке
через <script> самовыполняется и зовёт window.MDT.registerModule.
Использование
В package.json модуля:
{
"scripts": { "build": "mdt-module-build" },
"devDependencies": { "mdt-module-builder": "^1.0.0" },
"dependencies": { "mdt-client": "^31", "ics-ui-kit": "...", "lucide-react": "..." },
"peerDependencies": { "react": "^19", "react-dom": "^19" }
}Entry — src/index.ts (переопределяется "mdt": { "entry": "..." }). Сборка: npm run build → dist/index.js.
devtool/builder вызывают npm run build в репе модуля — менять их не нужно, контракт dist/ соблюдён.
Дедуп (вариант B)
- react, react-dom, react-dom/client, react/jsx-runtime, react/jsx-dev-runtime — НЕ бандлятся.
Заменяются alias-шимами, читающими
globalThis.__mdtShared[spec](MDT ставит его при старте). → один инстанс React во всём рантайме, нет «Invalid hook call». → react/react-dom не обязаны быть установлены при сборке (имена их экспортов зашиты в пакет). - ics-ui-kit, lucide-react, mdt-client — бандлятся внутрь
index.js(должны быть установлены). Их внутреннийimport "react"тоже перехватывается шимом. - CSS инлайнится в
index.js(рантайм-инъекция<style>), как старый style-loader — оверлей копирует толькоindex.js, отдельного.cssнет.
Контракт с платформой
Модуль и MDT договариваются о:
- имени глобала
window.__mdtShared; - наборе ключей
SHARED_EXACT(react-семья); - мажоре React (от него зависит список именованных экспортов
SHARED_NAMES).
MDT-сторона контракта — ui/vite-app/src/legacy/config-global.ts (ставит __mdtShared).
Vite / Node
Пакет зависит от Vite 6 (Rollup), а не Vite 8 (Rolldown), как сам MDT-app. Причина — раннер CI
publish-module на Node 18, а Vite 8 требует Node ≥20.19. Это осознанный техдолг высшего
приоритета (ui/vite-app/TECH_DEBT.md, P0): вернуть на Vite 8, когда раннеры переедут на Node 20+.
На выход (IIFE + дедуп-шимы) мажор Vite не влияет — артефакт совместим.
Версионирование
SemVer пакета относительно платформы:
- major — смена контракта: имя глобала, набор
SHARED_EXACT, мажор React (обновляютсяSHARED_NAMES). Модули осознанно поднимаютmdt-module-builderи проверяют совместимость. - minor/patch — внутренние правки сборки; выходной артефакт остаётся совместимым.
| mdt-module-builder | React | Платформа MDT | |---|---|---| | 1.x | 19 | (заполнить при первом релизе) |
Публикация
Публикуется вручную в публичный npm (как mdt-client), автопубликации в CI нет.
cd ui/module-builder
npm publish