Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
5 Steps to Your Frankenstein Micro Frontends
Search
Manfred Steyer
PRO
February 10, 2022
Programming
590
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
5 Steps to Your Frankenstein Micro Frontends
Manfred Steyer
PRO
February 10, 2022
More Decks by Manfred Steyer
See All by Manfred Steyer
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
180
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
0
110
Nostalgia Meets Technology: Super Mario with TypeScript
manfredsteyer
PRO
0
180
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
230
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
160
Agentic UI
manfredsteyer
PRO
0
230
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
290
Agentic UI beyond Chats Architecture Patterns & Open Standards @ngMunich 05/2026
manfredsteyer
PRO
0
240
Agentic AI in the Frontend: Architectures with Open Standards @iJS London 2026
manfredsteyer
PRO
0
170
Other Decks in Programming
See All in Programming
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
120
Prismを使った型安全な暗号化_関数型まつり2026
_fhhmm
0
130
技術記事、 専門家としてのプログラマ、 言語化
mizchi
14
7.5k
5分で問診!Composer セキュリティ健康診断
codmoninc
0
220
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
100
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
200
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
160
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
140
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
370
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
170
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
320
Foundation Models frameworkで画像分析
ryodeveloper
1
120
Featured
See All Featured
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
220
We Have a Design System, Now What?
morganepeng
55
8.2k
The untapped power of vector embeddings
frankvandijk
2
1.8k
sira's awesome portfolio website redesign presentation
elsirapls
0
300
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
190
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
220
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
220
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
350
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Automating Front-end Workflow
addyosmani
1370
210k
Transcript
@ManfredSteyer ManfredSteyer 5 Steps to Your Frankenstein Micro Frontends Manfred
Steyer, ANGULARarchitects.io
@ManfredSteyer Egg-Laying Woolly Milk Pig (German Metaphor)
@ManfredSteyer Booking App Booking App Check-in App Check-in App Boarding
App Boarding App Luggage App Luggage App Micro Frontends
@ManfredSteyer
@ManfredSteyer
@ManfredSteyer Booking App Booking App Check-in App Check-in App Boarding
App Boarding App Luggage App Luggage App One Reason: Migrating Step by Step (1) (1) (2+) (2+)
@ManfredSteyer Booking App Booking App Check-in App Check-in App Boarding
App Boarding App Luggage App Luggage App Onother Reason: Merger
@ManfredSteyer
@ManfredSteyer Contents #1: Module Federation 101 #2: Loading several SPAs
#3: 5 Steps to Your Solution
@ManfredSteyer Manfred Steyer
@ManfredSteyer
@ManfredSteyer Idea const Component = await import('other-app/comp')
@ManfredSteyer Webpack 5 Module Federation Shell (Host) Microfrontend (Remote) //
Maps Urls in // webpack config remotes: { mfe1: "http://..." } // Expose files in // webpack config exposes: { './Cmp': './my.cmp.ts' } import('mfe1/Cmp')
@ManfredSteyer How to Share Libs? Shell (Host) Microfrontend (Remote) shared:
[ "@angular/core", "…" ] shared: [ "@angular/core", "…" ]
@ManfredSteyer ❤️
@ManfredSteyer await import('other-app/main'); const rootElm = document.createElement('my-element') document.body.appendChild(rootElm); WrapperComponent It's
a bit easier if this is a web component
@ManfredSteyer The Best of Both Worlds
@ManfredSteyer https://red-ocean-0fe4c4610.azurestaticapps.net
@ManfredSteyer Free eBook ANGULARarchitects.io/book Updated for Module Federation and Alternatives
@ManfredSteyer
@ManfredSteyer Some Ugly Pitfalls and Workarounds Multiple Routers Bundle Size
Cache Angular Platform Zone.js
@ManfredSteyer Further Reading on Tricky Details etc.
@ManfredSteyer
@ManfredSteyer // webpack.config.js in Micro Frontend plugins: [ new ModuleFederationPlugin({
name: "react", filename: "remoteEntry.js", exposes: { './web-components': './app.js', }, shared: ["react", "react-dom"] }), ]
@ManfredSteyer // Routing Config in Shell { //path: 'react', matcher:
startsWith('react'), component: WebComponentWrapper, data: { type: 'script', remoteEntry: 'https://[…]/remoteEntry.js', remoteName: 'react', exposedModule: './web-components', elementName: 'react-element' } as WebComponentWrapperOptions },
@ManfredSteyer // Path Matcher in both, Shell and Micro Frontends
{ //path: 'react', matcher: startsWith('react'), component: WebComponentWrapper, data: { type: 'script', remoteEntry: 'https://[…]/remoteEntry.js', remoteName: 'react', exposedModule: './web-components', elementName: 'react-element' } as WebComponentWrapperOptions },
@ManfredSteyer // Bootstrapping in both, Shell and Micro Frontends bootstrap(AppModule,
{ production: environment.production });
@ManfredSteyer // app.component.ts // Make shell share zone.js shareNgZone(ngZone); //
Only needed in MFEs: connectRouter(router);
@ManfredSteyer const sharedMappings = new mf.SharedMappings(); sharedMappings.register( path.join(__dirname, '../../tsconfig.json'), ['@my-project/local-lib-in-monorepo'],
@ManfredSteyer https://github.com/manfredsteyer/react-app
@ManfredSteyer
@ManfredSteyer // Path Matcher in both, Shell and Micro Frontends
{ //path: 'react', matcher: startsWith('react'), component: WebComponentWrapper, data: { type: 'script', remoteEntry: 'https://[…]/remoteEntry.js', remoteName: 'react', exposedModule: './web-components', elementName: 'react-element' } as WebComponentWrapperOptions },
@ManfredSteyer You Need a Good Reason! Module Federation: Sharing Code
Web Components: Hiding Frameworks and Versions
@ManfredSteyer Take Care of the Egg-Laying Woolly Milk Pig!
@ManfredSteyer d Slides & Examples Remote Company Workshops and Consulting
http://angulararchitects.io