Skip to content

Commit 6317508

Browse files
committed
- remote origin setup, readme
1 parent 222ba82 commit 6317508

File tree

1 file changed

+23
-21
lines changed

1 file changed

+23
-21
lines changed

README.md

+23-21
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,37 @@
11
# Plugin Architektura s Webpack5, NX a Angular 14+ (Ivy + AOT)
22
## Jak spustit:
3-
- Vybuildit plugin a widget
4-
- `npm run build:all`
5-
- přetáhnout obsah složky `dist/apps` do `apps/shell/assets` (v assets tedy bude složka `plugins` a `widgets`)
6-
- a spustit aplikaci pomocí: `nx run shell:serve:production`
7-
- otevřít [aplikaci](http://localhost:4200)
3+
1. Vybuildit plugin a widget (mělo by být součástí gitu, lze přeskočit na krok 3.)
4+
1. `npm run build:all`
5+
1. přetáhnout obsah složky `dist/apps` do `apps/shell/assets` (v assets tedy bude složka `plugins` a `widgets`)
6+
1. spustit aplikaci pomocí: `nx run shell:serve:production`
7+
1. otevřít [aplikaci](http://localhost:4200)
88
---
9-
- Alternativně lze vše servnout s hot reloadem:
10-
- `npm run start:all`
11-
- otevřít [aplikaci](http://localhost:4200)
9+
1. Alternativně lze vše servnout s hot reloadem:
10+
1. `npm run start:all`
11+
1. otevřít [aplikaci](http://localhost:4200)
1212

1313

1414
## Jak to funguje
15-
- Využívá koncept webpacku zvaný [Module Federation](https://webpack.js.org/concepts/module-federation/)
15+
- Využívá [Module Federation](https://webpack.js.org/concepts/module-federation/) koncept webpacku
1616
- Pro správné načítání modulů je nutné, aby webpack věděl, kde se daný modul nachází - k tomu slouží funkce `setRemoteDefinitions`, která se aktuálně volá při bootstrapu shell aplikace v `apps/shell/src/main.ts`
17-
- **Tento manifest lze ale nastavit kdykoliv**, jediná podmínka je, aby se tak stalo ještě před tím, než se pokusíme naloadovat plugin pomoci funkce `loadRemoteModule`
18-
- Každý plugin si ve svém souboru `module-federation.config.js` může nastavit nekolik entry pointu v atributu `exposes`. Může to být modul, komponenta, cesty pro ng-router...
19-
- Aktuálně se například v `apps/shell/src/app/app.routes.ts` stahuje modul pluginu calendar, který zaregistruje sve cesty do ng-routeru.
17+
- **Tento manifest lze ale nastavit kdykoliv**, jediná podmínka je, aby se tak stalo ještě před tím, než se pokusíme naloadovat modul pomoci funkce `loadRemoteModule`
18+
- Každý plugin si ve svém souboru `module-federation.config.js` může nastavit své entry pointy pomocí atributu `exposes`. Může to být modul, komponenta, cesty pro ng-router...
19+
- Aktuálně se například v `apps/shell/src/app/app.routes.ts` stahuje modul pluginu `calendar`, který zaregistruje své cesty do ng-routeru.
2020
- Nyní jsem se nezabýval implementací pro správu pluginu, takže cesta `calendar` je hardcoded, není ovšem problém tyto cesty nastavit dynamicky, např. po fetchnuti z BE.
2121
- V aplikaci `apps/shell/src/app/app.component.ts` se take renderuji 2 komponenty - jedna z pluginu calendar a druha z widgetu, jež je standalone builditelna komponenta.
2222
- Opět je to zde mírně hardoced, ale analogicky jako s cestami `calendar` pluginu, není problém tyto informace nastavit dynamicky, např. po fetchnuti z BE.
2323

2424

2525
## Výhody
26-
- pro načtení pluginu se používá funkce z NX `@nrwl/angular/mf/loadRemoteModule`, ktere pod pokličkou pouzivaji webpack a jejich [ModuleFederation plugin](https://webpack.js.org/plugins/module-federation-plugin/)
26+
- pro načtení pluginu se používá funkce z NX `@nrwl/angular/mf/loadRemoteModule`, která pod pokličkou používá webpack a jejich [ModuleFederation plugin](https://webpack.js.org/plugins/module-federation-plugin/)
2727
- heavy lifting tedy dělá NX, potažmo webpack
2828
- kompatibilní s NX incremental builds
2929
- Díky webpacku chunkování funguje rekurzivně - **lazy loading tedy funguje kdekoliv**, i v dynamicky načteném pluginu
3030
- Samostatné pluginy a widgety lze `servnout`, tím pádem je velmi jednoduchý jejich developement. Lze je take vybuildit a zazipovat pro účel pluginizace (_inspirace názvu z deduplikace_).
3131
- Možnost snadné implementace e2e testu na jednotlivé pluginy
3232

3333
## Nevyhody
34-
- ???
34+
- zatím jsem na nic neřešitelného nenarazil
3535

3636
## NX's withModuleFederation
3737
- Opinionated wrapper na [ModuleFederationPlugin](https://webpack.js.org/plugins/module-federation-plugin/) webpacku
@@ -43,8 +43,8 @@
4343
- dependencies co vyčte z projectGraphu, tzn. pokud naimportuju nejakou knihovnu z monorepa, sam ji prida do sharovanych dependencies. Zpravidla je to žádoucí chování, lze tomu ale zabránit v configu.
4444

4545
## Verzování
46-
- své verze si každý plugin a appka udržují ve svem `package.json`
47-
- appka nebo plugin si v souboru `module-federation.config.js` mohou dale specifikovat, ktere verze jednotlivych pluginu potrebuji, např.:
46+
- své verze si každý plugin a appka udržují ve svém `package.json`
47+
- appka nebo plugin si v souboru `module-federation.config.js` mohou dale specifikovat, které verze jednotlivých pluginu potřebují, např.:
4848
```js
4949
{
5050
// ...
@@ -53,7 +53,7 @@
5353
]
5454
}
5555
```
56-
- Pokud dojde k neshodě smluvených verzí, upozorní nás webpack následujícím errorem:
56+
- Pokud dojde k neshodě smluvených verzí, upozorní nás webpack následujícím runtime errorem:
5757
- `Unsatisfied version 2.0.0 from shell of shared singleton module @ng-mfa/shared/data-access/random (required >=1.0.0 <1.1.1)`
5858
- **requiredVersion** lze specifikovat v několika formátech:
5959
- standardní formát s ~ nebo ^, např.:
@@ -63,15 +63,17 @@
6363
- '>=1.0.0 <1.1.1', nebo-li verze od 1.0.0 (včetně) až 1.1.1 (vyjma)
6464

6565
## Commands
66-
- novy plugin:
66+
- nový plugin:
6767
- `npx nx g @nrwl/angular:remote plugins/<PLUGIN_NAME>`
68-
- novy plugin/widget jako standalone component:
68+
- nový widget jako standalone component:
6969
- `npx nx g @nrwl/angular:remote widgets/<WIDGET_NAME> --standalone`
7070

7171
## Source codes
72-
- Zdrojový kod na NX implementaci pro **withModuleFederation** wrapper a **loadRemoteModule** - dynamické načítání modulů.
73-
- https://github.com/nrwl/nx/blob/master/packages/angular/mf/mf.ts
72+
- Zdroják je mnohdy lepší než dokumentace od NX, tak přikládám i url k těm stěžejním věcem
73+
- **withModuleFederation** wrapper:
7474
- https://github.com/nrwl/nx/blob/master/packages/angular/src/utils/mf/with-module-federation.ts
75+
- **loadRemoteModule** - dynamické načítání modulů.
76+
- https://github.com/nrwl/nx/blob/master/packages/angular/mf/mf.ts
7577

7678
## TODO:
7779
- [x] verify lazy loading inside plugins works

0 commit comments

Comments
 (0)