Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Micro Frontends in practice - FrontCon 2020

Micro Frontends in practice - FrontCon 2020

Micro Frontends in practice: the easy and the hard parts

One of the trending topics in the JavaScript ecosystem is definitely “Micro Frontends”.

Do they really help to build professional web applications?
- Are they always the best choice?
- Do leading frameworks like Angular directly support them?
- Do Micro Frontends and global State Management work well together?
- How do single Micro Apps react to URL changes?

I will answer all these questions and provide practical insights on features directly supported by Angular and show possible solutions for those parts that have to be implemented individually.

Michael Egger-Zikes

August 14, 2020
Tweet

More Decks by Michael Egger-Zikes

Other Decks in Programming

Transcript

  1. About Michael • Michael Zikes ANGULARarchitects.io • Trainings and Consultancy

    • Focus on Angular Public: Frankfurt, Munich, Vienna In-House: everywhere angulararchitects.io/angular-workshops Michael Zikes (@MikeZks)
  2. Definition of Micro Frontends • Aim to develop self-contained apps

    or features • Can be composed and interact with each other • Share a consistent user experience • Play together with Micro Services • Lead to independent developer teams
  3. Architecture targets • Independent builds • Independent deployment • Runtime

    integration • Multiple frontend frameworks/libraries • Different dependency versions • Possible but hard to manage
  4. Micro Frontends & Web Components • Frontend Monolith • Big

    application, hard to maintain • Micro Frontends • Small self-contained apps or features • Build Monolith • Whole application is known at build time • Target to have self-contained apps or features as well • Reuse of already built libraries w/o changes • Web Components • Dynamic runtime integration possible • Independent builds & deployment possible
  5. Web Components & professional Architecture? • Help to achieve certain

    architecture targets • Requires a mature Application Shell environment to work smoothly • Downsides of dynamic runtime integration • Leads to less predictability • Leads to a higher E2E testing effort • Consider alternatives • w/o runtime integration requirement • w/o need for different technologies • use a Build Monolith instead
  6. Angular framework support • Micro Frontends in a Build Monolith

    • Default strategy in Angular • Everything is known at build time • Micro Frontends as Web Components • Angular Web Components with @angular/elements • Almost no direct Angular support for Web Component Micro Apps • Custom implementations necessary • Custom builders & single bundle (see ngx-build-plus)
  7. Global State Management • Is standalone operation of the Micro

    App required? • Can an App Shell environment with central services be expected? • Majority of cases: • Choose a self-contained Micro App with a small, well defined public interface • Exchange state with data bindings, not with dependency injection • Related to Redux State Management • This may lead to more than one Root-Store w/i the same window object • Redux DevTools and @ngrx/store-devtools support more than one store
  8. Responsive Design • Bootstrap Grid System uses media queries •

    Does the App Shell control the Micro App size? • How does your Micro App react if the window viewport stays the same, but the space for the Micro App changes? • Consider to use CSS Flexbox or CSS Grid instead
  9. Routing • Independent builds lead to more than one Angular

    forRoot-Router • Other frameworks/libraries may change the URL as well • Angular overwrites URLs resp. unknown routes lead to errors • URL overlapping b/w Micro Apps • Custom implementation necessary to avoid this • Central definition necessary, that needs to be respected in every Micro App • Possible solution: Aux Routes resp. named Router Outlets
  10. ! • Web Components not always best • Plan to

    develop a mature App Shell • Think of Responsive Design • How to integrate & communicate • URL changes are critical Key takeaways
  11. Follow up • Shared dependencies with Webpack Module Federation •

    https://www.angulararchitects.io/aktuelles/the-microfrontend-revolution-module-federation-in-webpack-5 • NX library brings a lot of useful features • https://nx.dev/angular • UMD bundles could disappear from APF • ES6 community alternative possible • Angular Web Components Router • Upcoming community project to patch default behavior (Twitter @MikeZks) • Follow the development of @brandontroberts declarative router • https://github.com/brandonroberts/angular-routing
  12. [web] ANGULARarchitects.io [email] [email protected] [twitter] Michael Zikes (@MikeZks) Slides Contact

    and Downloads Public: Frankfurt, Munich, Vienna In-House: everywhere angulararchitects.io/angular-workshops