arui-scripts 20.5.1 → 20.6.1
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/.turbo/turbo-test.log +4 -4
- package/CHANGELOG.md +20 -0
- package/build/configs/app-configs/get-defaults.js +1 -0
- package/build/configs/app-configs/index.js +2 -0
- package/build/configs/app-configs/types.d.ts +6 -1
- package/build/configs/app-configs/validate-config.d.ts +2 -0
- package/build/configs/app-configs/validate-config.js +8 -0
- package/build/configs/modules.d.ts +1 -1
- package/build/configs/modules.js +18 -11
- package/build/configs/webpack.client.js +68 -23
- package/build/configs/webpack.server.js +54 -17
- package/build/templates/start.template.js +1 -1
- package/build/tsconfig-local.tsbuildinfo +1 -1
- package/docs/modules.md +80 -28
- package/docs/settings.md +19 -0
- package/package.json +2 -1
package/docs/modules.md
CHANGED
|
@@ -351,34 +351,27 @@ arui-scripts предоставляет два решения для этой п
|
|
|
351
351
|
:warning: **Внимание!** - изоляция стилей работает только в одном направлении - стили модуля не будут применены к элементам
|
|
352
352
|
хост-приложения. Но стили хост-приложения могут быть применены к элементам модуля.
|
|
353
353
|
|
|
354
|
-
Для того чтобы использовать этот метод,
|
|
354
|
+
Для того чтобы использовать этот метод, вы можете:
|
|
355
355
|
|
|
356
|
-
1.
|
|
356
|
+
1. Использовать compat модули. В этом случае css-префикс будет добавляться автоматически. По умолчанию префикс будет иметь вид `.module-${moduleId}`. Вы можете его изменить через настройки:
|
|
357
357
|
|
|
358
358
|
```ts
|
|
359
|
-
// ./arui-scripts.config.ts
|
|
360
|
-
import type { PackageSettings } from 'arui-scripts';
|
|
361
|
-
|
|
359
|
+
// ./arui-scripts.config.ts
|
|
362
360
|
const aruiScriptsConfig: PackageSettings = {
|
|
363
361
|
compatModules: {
|
|
364
|
-
// Тут ключ - название библиотеки, значение - имя переменной в window, которая будет использоваться для получения библиотеки
|
|
365
|
-
// Это те библиотеки, которые этот проект будет предоставлять модулям, подключаемым в него
|
|
366
|
-
shared: {
|
|
367
|
-
'react': 'react',
|
|
368
|
-
'react-dom': 'reactDOM',
|
|
369
|
-
},
|
|
370
362
|
exposes: {
|
|
371
363
|
'SomeModule': {
|
|
372
364
|
entry: './src/modules/some-module/index',
|
|
373
|
-
//
|
|
374
|
-
externals: {
|
|
375
|
-
react: 'react',
|
|
376
|
-
'react-dom': 'reactDOM',
|
|
377
|
-
},
|
|
365
|
+
// префикс по умолчанию будет `.module-SomeModule`
|
|
378
366
|
},
|
|
379
|
-
'
|
|
380
|
-
entry: './src/modules/
|
|
367
|
+
'OtherModule': {
|
|
368
|
+
entry: './src/modules/other-module/index',
|
|
369
|
+
cssPrefix: '#my-prefix' // любой валидный css селектор
|
|
381
370
|
},
|
|
371
|
+
'WithoutPrefix': {
|
|
372
|
+
entry: './src/modules/other-module/index',
|
|
373
|
+
cssPrefix: false, // префикс использоваться не будет
|
|
374
|
+
}
|
|
382
375
|
}
|
|
383
376
|
}
|
|
384
377
|
}
|
|
@@ -386,16 +379,14 @@ const aruiScriptsConfig: PackageSettings = {
|
|
|
386
379
|
export default aruiScriptsConfig;
|
|
387
380
|
```
|
|
388
381
|
|
|
382
|
+
2. Использовать настройку cssPrefix для обычных модулей. **Внимание!** При использовании этой настройки по умолчанию css префикс добавится ко всем стилям приложения!
|
|
383
|
+
|
|
389
384
|
```ts
|
|
390
385
|
// ./arui-scripts.config.ts module federation
|
|
391
386
|
import type { PackageSettings } from 'arui-scripts';
|
|
392
387
|
|
|
393
388
|
const aruiScriptsConfig: PackageSettings = {
|
|
394
389
|
modules: {
|
|
395
|
-
shared: {
|
|
396
|
-
'react': '^17.0.0',
|
|
397
|
-
'react-dom': '^17.0.0',
|
|
398
|
-
},
|
|
399
390
|
exposes: {
|
|
400
391
|
'Module': './src/modules/module/index',
|
|
401
392
|
},
|
|
@@ -408,7 +399,40 @@ const aruiScriptsConfig: PackageSettings = {
|
|
|
408
399
|
export default aruiScriptsConfig;
|
|
409
400
|
```
|
|
410
401
|
|
|
411
|
-
|
|
402
|
+
Если вы хотите, чтобы префикс применился только к модулям и не менял стили всей остальной сборки - вы можете использовать настройку `modules.options.useSeparateBuild`:
|
|
403
|
+
|
|
404
|
+
```ts
|
|
405
|
+
// ./arui-scripts.config.ts module federation
|
|
406
|
+
import type { PackageSettings } from 'arui-scripts';
|
|
407
|
+
|
|
408
|
+
const aruiScriptsConfig: PackageSettings = {
|
|
409
|
+
modules: {
|
|
410
|
+
exposes: {
|
|
411
|
+
'Module': './src/modules/module/index',
|
|
412
|
+
},
|
|
413
|
+
shared: {
|
|
414
|
+
react: {
|
|
415
|
+
version: '^18.0.0',
|
|
416
|
+
eager: true,
|
|
417
|
+
},
|
|
418
|
+
},
|
|
419
|
+
options: {
|
|
420
|
+
cssPrefix: '.my-module',
|
|
421
|
+
useSeparateBuild: true, // для WMF будет создана отдельная сборка и css префиксы применятся только для нее. Основное приложение затронуто не будет
|
|
422
|
+
separateBuildShared: { // опционально вы можете создать отдельную конфигурацию shared модулей, например если основное приложение должно подключать библиотеку в eager режиме, а модуль должен подключать ее без eager
|
|
423
|
+
react: {
|
|
424
|
+
version: '^18.0.0',
|
|
425
|
+
},
|
|
426
|
+
},
|
|
427
|
+
},
|
|
428
|
+
},
|
|
429
|
+
};
|
|
430
|
+
|
|
431
|
+
export default aruiScriptsConfig;
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
Вам так же потребуется изменить входную точку модуля и добавить ваш css префикс в root элемент вашего модуля:
|
|
435
|
+
|
|
412
436
|
|
|
413
437
|
```tsx
|
|
414
438
|
// ./src/modules/some-module/index
|
|
@@ -432,6 +456,7 @@ export const unmount: ModuleUnmountFunction = (targetNode) => {
|
|
|
432
456
|
ReactDOM.unmountComponentAtNode(targetNode);
|
|
433
457
|
};
|
|
434
458
|
|
|
459
|
+
// Если вы используете compat модули:
|
|
435
460
|
(window as WindowWithMountableModule).SomeModule = { // имя переменной в window должно соответствовать имени модуля в exposes
|
|
436
461
|
mount: mountModule,
|
|
437
462
|
unmount: unmountModule,
|
|
@@ -455,7 +480,6 @@ Webpack module federation делает абсолютно то же самое,
|
|
|
455
480
|
`default` модули:
|
|
456
481
|
- **+++** Простой способ для переиспользования библиотек между модулем и приложением-хостом.
|
|
457
482
|
- **+++** Возможность использовать разные версии общих библиотек в разных модулях/хостах (речь про те библиотеки, которые будут шарится).
|
|
458
|
-
- **---** Нет встроенной изоляции стилей. Стили модуля будут применены к хост-приложению.
|
|
459
483
|
- **---** Нет возможности использовать модуль в приложении, которое не использует webpack.
|
|
460
484
|
|
|
461
485
|
Проблема изоляции стилей может быть решена с помощью [shadow dom](#shadow-dom),
|
|
@@ -466,13 +490,11 @@ Webpack module federation делает абсолютно то же самое,
|
|
|
466
490
|
- **---** Нет возможности использовать разные версии общих библиотек в разных модулях/хостах, если вы хотите их шарить.
|
|
467
491
|
|
|
468
492
|
*Как понять какой режим использовать?*
|
|
469
|
-
|
|
470
|
-
вам в таком случае не грозят. Если же вы используете обычный css, или ваши библиотеки используют обычный css, то лучше
|
|
471
|
-
использовать `compat` режим.
|
|
493
|
+
Рекомендуется всегда выбирать `default` режим. `compat` режим оставлен для совместимости. На данный момент все фичи `compat` режима реализованы в `default` модулях.
|
|
472
494
|
|
|
473
495
|
## Shadow dom
|
|
474
496
|
[Shadow DOM](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM) - это спецификация, которая позволяет
|
|
475
|
-
создавать изолированные DOM-деревья,
|
|
497
|
+
создавать изолированные DOM-деревья, не влияющие на DOM-дерево родительского элемента.
|
|
476
498
|
|
|
477
499
|
arui-scripts предоставляет возможность использовать shadow dom для модулей. Для этого вам нужно:
|
|
478
500
|
|
|
@@ -514,6 +536,31 @@ export const MyAwesomeComponent = () => {
|
|
|
514
536
|
Этот режим работает как для _default_, так и для _compat_ модулей.
|
|
515
537
|
Внутри targetElementRef будет создаваться shadowRoot, и модуль и его стили будут монтироваться в него.
|
|
516
538
|
|
|
539
|
+
## Работа с порталами
|
|
540
|
+
|
|
541
|
+
В обоих вариантах нужно вспомнить про порталы. Оба метода меняют то, к какой части дом-дерева будут применяться стили. Поскольку порталы по умолчанию зачастую рендрятся в body - стили из модуля не смогут корректно примениться.
|
|
542
|
+
Стандартный компонент [portal](https://core-ds.github.io/core-components/master/?path=/docs/portal--docs) из core-components
|
|
543
|
+
умеет получать targetNode из провайдера:
|
|
544
|
+
|
|
545
|
+
```tsx
|
|
546
|
+
import { PortalContext } from '@alfalab/core-components/shared';
|
|
547
|
+
|
|
548
|
+
const CSS_PREFIX = 'module-SomeModule';
|
|
549
|
+
|
|
550
|
+
export const mount: ModuleMountFunction = (targetNode, runParams, serverState) => {
|
|
551
|
+
ReactDOM.render(
|
|
552
|
+
<div className={ CSS_PREFIX }>
|
|
553
|
+
<PortalContext.Provider value={() => document.querySelector(CSS_PREFIX)}>
|
|
554
|
+
Hello from module!
|
|
555
|
+
</PortalContext.Provider>
|
|
556
|
+
</div>,
|
|
557
|
+
targetNode,
|
|
558
|
+
);
|
|
559
|
+
}
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
Если в коде приложения так же используются какие-либо еще варианты обращения к глобальным dom-элементам (head, body, ...) вам так же нужно модифицировать код для корректной работы с css-префиксами или shadowDOM.
|
|
563
|
+
|
|
517
564
|
# Кеширование модулей
|
|
518
565
|
|
|
519
566
|
По умолчанию модули будут загружаться каждый раз при использовании. Если ваше приложение будет монтировать/размонтировать модуль несколько раз,
|
|
@@ -721,6 +768,11 @@ type Modules = {
|
|
|
721
768
|
};
|
|
722
769
|
shared?: (string | SharedObject)[] | SharedObject; // конфигурация shared параметра для ModuleFederationPlugin
|
|
723
770
|
shareScope?: string // скоуп который будет присваиваться модулям в shared если иное имя не будет задано в sharedConfig. Значение по умолчанию - 'default'
|
|
771
|
+
options?: { // дополнительные настройки модулей
|
|
772
|
+
cssPrefix?: false | string; // префикс, который будет добавляться ко всем css стилям
|
|
773
|
+
useSeparateBuild?: boolean; // использовать ли отдельную сборку для wmf. Влияет на то, к чему будет применяться cssPrefix. Если false - cssPrefix применится ко всей сборке приложения
|
|
774
|
+
separateBuildShared?: (string | SharedObject)[] | SharedObject; // опциональная конфигурация shared параметра для wmf сборки. Используется только вместе с useSeparateBuild. По умолчанию wmf билд будет использовать общую конфигурацию shared.
|
|
775
|
+
}
|
|
724
776
|
};
|
|
725
777
|
|
|
726
778
|
type SharedObject = {
|
package/docs/settings.md
CHANGED
|
@@ -238,6 +238,25 @@ const settings = {
|
|
|
238
238
|
Использование swc позволяет значительно ускорить сборку (до 2 раз на больших проектах), но не будет создавать полностью идентичный с babel код.
|
|
239
239
|
Итоговый бандл может получиться немного больше, чем при использовании babel, но разница полностью компенсируется при использовании сжатия.
|
|
240
240
|
|
|
241
|
+
#### experimentalReactCompiler
|
|
242
|
+
Позволяет включить [react-compiler](https://react.dev/learn/react-compiler/introduction) в вашем проекте. **Внимание!** Этот режим находится в статусе эксперимента и использовать его в продакшене на данный момент не рекомендуется!
|
|
243
|
+
|
|
244
|
+
Включение этой опции на данный момент поддерживается только вместе с `codeLoader=swc`.
|
|
245
|
+
|
|
246
|
+
Возможные значения:
|
|
247
|
+
- `disabled` - дефолт, react-compiler выключен
|
|
248
|
+
- `ReactCompilerOptions` - [конфигурация](https://react.dev/reference/react-compiler/configuration) компилятора.
|
|
249
|
+
|
|
250
|
+
При использовании с react < 19 вам необходимо добавить в зависимости вашего проекта `react-compiler-runtime` и использовать настройку `target`, например:
|
|
251
|
+
```ts
|
|
252
|
+
const packageSettings = {
|
|
253
|
+
// ...
|
|
254
|
+
experimentalReactCompiler: {
|
|
255
|
+
target: '18', // или '17'
|
|
256
|
+
},
|
|
257
|
+
};
|
|
258
|
+
```
|
|
259
|
+
|
|
241
260
|
#### installServerSourceMaps
|
|
242
261
|
Добавлять ли в серверную сборку пакет source-map-support. По умолчанию `false`.
|
|
243
262
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "arui-scripts",
|
|
3
|
-
"version": "20.
|
|
3
|
+
"version": "20.6.1",
|
|
4
4
|
"main": "./build/index.js",
|
|
5
5
|
"typings": "./build/index.d.ts",
|
|
6
6
|
"license": "MPL-2.0",
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
"babel-jest": "28.1.3",
|
|
51
51
|
"babel-loader": "9.2.1",
|
|
52
52
|
"babel-plugin-istanbul": "^7.0.0",
|
|
53
|
+
"babel-plugin-react-compiler": "^1.0.0",
|
|
53
54
|
"babel-plugin-transform-react-remove-prop-types": "0.4.24",
|
|
54
55
|
"brotli-dict": "^1.1.4",
|
|
55
56
|
"case-sensitive-paths-webpack-plugin": "2.4.0",
|