mdt-module-builder 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -2
- package/package.json +1 -1
- package/src/index.mjs +20 -6
package/README.md
CHANGED
|
@@ -30,7 +30,12 @@ devtool/builder вызывают `npm run build` в репе модуля — м
|
|
|
30
30
|
- **`SHARED_GLOBALS`** (`@tanstack/react-query`, `zustand` + подпути, `echarts`, `echarts-for-react`)
|
|
31
31
|
— НЕ бандлятся: externalize + чтение `globalThis.__mdtShared[spec]`. В отличие от react-семьи,
|
|
32
32
|
имена экспортов перечислять не нужно. Как вынести новую такую зависимость — см. [SHARED-DEPENDENCIES.md](./SHARED-DEPENDENCIES.md).
|
|
33
|
-
- **ics-ui-kit
|
|
33
|
+
- **ics-ui-kit** (сам пакет и любой сабпас — `ics-ui-kit/components/*`, `ics-ui-kit/lib/*`, …) —
|
|
34
|
+
НЕ бандлится: externalize по префиксу (`SHARED_PREFIXES`) + чтение `globalThis.__mdtShared[spec]`.
|
|
35
|
+
Сабпасы перечислять не нужно. MDT кладёт туда свой инстанс (vite-app `legacy/shared-ui-kit.ts`),
|
|
36
|
+
по ключу на каждый сабпас. → один инстанс ui-kit → общий React-контекст (тема, провайдеры): иначе
|
|
37
|
+
компоненты модуля читали бы чужой `ThemeContext`. CSS-сабпасы (`styles.css`) не externalize-ятся.
|
|
38
|
+
- **lucide-react, mdt-client** — бандлятся внутрь `index.js` (должны быть установлены).
|
|
34
39
|
Их внутренний `import "react"` тоже перехватывается шимом.
|
|
35
40
|
- **CSS** инлайнится в `index.js` (рантайм-инъекция `<style>`), как старый style-loader —
|
|
36
41
|
оверлей копирует только `index.js`, отдельного `.css` нет.
|
|
@@ -66,9 +71,14 @@ registerModule(() => MDT.Navigation.addNode({ code: "x", title: "X" }));
|
|
|
66
71
|
Модуль и MDT договариваются о:
|
|
67
72
|
|
|
68
73
|
- имени глобала **`window.__mdtShared`**;
|
|
69
|
-
- наборе ключей **`SHARED_EXACT`** (react-семья)
|
|
74
|
+
- наборе ключей **`SHARED_EXACT`** (react-семья), **`SHARED_GLOBALS`** и префиксах
|
|
75
|
+
**`SHARED_PREFIXES`** (`ics-ui-kit`) — все они должны присутствовать в `__mdtShared` хоста;
|
|
70
76
|
- **мажоре React** (от него зависит список именованных экспортов `SHARED_NAMES`).
|
|
71
77
|
|
|
78
|
+
Вынос `ics-ui-kit` в `__mdtShared` — **ломающее** изменение контракта: модуль, собранный новым
|
|
79
|
+
билдером, больше не бандлит ui-kit и требует MDT, который его экспонирует (`legacy/shared-ui-kit.ts`).
|
|
80
|
+
Версию билдера поднимать соответственно (см. §Версионирование).
|
|
81
|
+
|
|
72
82
|
MDT-сторона контракта — `ui/vite-app/src/legacy/config-global.ts` (ставит `__mdtShared`).
|
|
73
83
|
|
|
74
84
|
## Vite / Node
|
package/package.json
CHANGED
package/src/index.mjs
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
// mdt-module-builder — сборка внешнего UI-модуля MDT билдером MDT (Vite), артефакт «по старому»:
|
|
2
2
|
// один самовыполняющийся dist/index.js (IIFE), который зовёт window.MDT.registerModule.
|
|
3
3
|
//
|
|
4
|
-
// Дедуп (MP-16057, вариант B): react-семья НЕ
|
|
5
|
-
//
|
|
6
|
-
//
|
|
4
|
+
// Дедуп (MP-16057, вариант B): react-семья и ics-ui-kit НЕ бандлятся — react-семья через
|
|
5
|
+
// alias-шимы, ics-ui-kit (и любой его сабпас) через externalize; оба читаются из
|
|
6
|
+
// globalThis.__mdtShared[spec] (его ставит MDT при старте) → один инстанс на рантайм.
|
|
7
|
+
// lucide-react пока бандлится внутрь; её внутренний import "react" ловит alias → общий React.
|
|
7
8
|
//
|
|
8
9
|
// react/* НЕ обязаны быть установлены в модуле (не попадают в бандл): имена их экспортов
|
|
9
10
|
// зашиты статически (SHARED_NAMES) и версионируются мажором React вместе с пакетом.
|
|
@@ -33,6 +34,19 @@ export const SHARED_GLOBALS = [
|
|
|
33
34
|
"echarts-for-react"
|
|
34
35
|
];
|
|
35
36
|
|
|
37
|
+
// Библиотеки, которые MDT хостит ЦЕЛИКОМ и отдаёт модулям единым инстансом через ПРЕФИКС: матчим и
|
|
38
|
+
// сам пакет, и любой его сабпас (ics-ui-kit/components/button, ics-ui-kit/lib/utils, …). В отличие
|
|
39
|
+
// от SHARED_GLOBALS (точные спецификаторы) сабпасы перечислять не нужно — их у ui-kit десятки и они
|
|
40
|
+
// растут. Экспорты каждого сабпаса кладёт MDT в globalThis.__mdtShared (vite-app legacy/shared-ui-kit.ts).
|
|
41
|
+
// Общий инстанс ui-kit нужен ради общего React-контекста (тема, провайдеры): две копии ui-kit = два
|
|
42
|
+
// разных ThemeContext даже при общем React. CSS-сабпасы (styles.css и т.п.) не externalize-им.
|
|
43
|
+
export const SHARED_PREFIXES = ["ics-ui-kit"];
|
|
44
|
+
|
|
45
|
+
function isSharedPrefix(id) {
|
|
46
|
+
if (id.endsWith(".css")) return false;
|
|
47
|
+
return SHARED_PREFIXES.some((p) => id === p || id.startsWith(p + "/"));
|
|
48
|
+
}
|
|
49
|
+
|
|
36
50
|
// Именованные экспорты react-семьи (React 19). Зашиты статически — react не ставится при сборке.
|
|
37
51
|
// При смене мажора React обновляются вместе с major-версией пакета (см. README §версионирование).
|
|
38
52
|
export const SHARED_NAMES = {
|
|
@@ -165,9 +179,9 @@ export function moduleViteConfig({ root, entry, outDir, watch = false, name = "_
|
|
|
165
179
|
minify: false,
|
|
166
180
|
...(watch ? { watch: {} } : {}),
|
|
167
181
|
rollupOptions: {
|
|
168
|
-
//
|
|
169
|
-
//
|
|
170
|
-
external: (id) => SHARED_GLOBALS.includes(id) || id.startsWith(MDT_SDK_PREFIX),
|
|
182
|
+
// externalize (инстанс даёт MDT через globalThis.__mdtShared, в модуль НЕ бандлятся): SHARED_GLOBALS
|
|
183
|
+
// (точные спецификаторы) + ics-ui-kit с сабпасами (SHARED_PREFIXES). react/* — alias-шимы; lucide бандлится.
|
|
184
|
+
external: (id) => SHARED_GLOBALS.includes(id) || isSharedPrefix(id) || id.startsWith(MDT_SDK_PREFIX),
|
|
171
185
|
// host кладёт значения в __mdtShared/__mdtSdk с флагом __esModule, поэтому
|
|
172
186
|
// interop модуля (__toESM) корректно отдаёт `.default` для default-импорта
|
|
173
187
|
// (иначе default-импорт, напр. echarts-for-react, превращается в объект-неймспейс → React
|