{"id":4947,"date":"2021-07-14T11:31:40","date_gmt":"2021-07-14T09:31:40","guid":{"rendered":"https:\/\/www.evertop.pl\/?p=4947"},"modified":"2021-07-18T16:24:02","modified_gmt":"2021-07-18T14:24:02","slug":"the-final-stage-of-micro-frontends-part-iii","status":"publish","type":"post","link":"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/","title":{"rendered":"Micro Frontend &#8211; The Final Step. Part III"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p><span style=\"font-weight: 400;\">We start the last chapter by discussing the design approach, the micro-frontend implementation, and the capabilities it offers.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">All of the information we found in the three articles on micro-frontend should be treated as a serious introduction to the topic.<\/span><\/p>\n<div class=\"media\"><span class=\"media-left\"><br \/>\n<img loading=\"lazy\" src=\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/02\/read-also.png\" alt=\"...\" width=\"40\" height=\"40\" \/><br \/>\n<\/span><\/p>\n<div class=\"media-body\">\n<h4 class=\"media-heading\">Read also: <a href=\"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/\" rel=\"noopener\">Introduction To Micro Frontend. Part I<\/a><\/h4>\n<\/div>\n<\/div>\n<div class=\"media\"><span class=\"media-left\"><br \/>\n<img loading=\"lazy\" src=\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/02\/read-also.png\" alt=\"...\" width=\"40\" height=\"40\" \/><br \/>\n<\/span><\/p>\n<div class=\"media-body\">\n<h4 class=\"media-heading\">Read also: <a href=\"https:\/\/www.evertop.pl\/en\/micro-frontend-deep-dive-into-micro-frontends-part-ii\/\" rel=\"noopener\">Micro Frontend \u2013 Deep Dive Into Micro-Frontends. Part II<\/a><\/h4>\n<\/div>\n<\/div>\n<p><span style=\"font-weight: 400;\">I present a short summary to remind you of what you already know:<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td>\n<p style=\"text-align: center;\"><b>Technique<\/b><\/p>\n<\/td>\n<td style=\"text-align: center;\"><b>Category<\/b><\/td>\n<td style=\"text-align: center;\"><b>Example implementation<\/b><\/td>\n<td style=\"text-align: center;\"><b>Strengths<\/b><\/td>\n<td style=\"text-align: center;\"><b>Weaknesses<\/b><\/td>\n<td>\n<p style=\"text-align: center;\"><b>Recommendation<\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>Build-time packages<\/td>\n<td>Build-time integration<\/td>\n<td style=\"text-align: center;\">NPN, yarn<\/td>\n<td>\n<p style=\"text-align: left;\">Easy to setup \u2013 no additional tools needed<\/p>\n<p style=\"text-align: left;\">Known to developers<\/p>\n<p style=\"text-align: left;\">Code deduplication<\/p>\n<p style=\"text-align: left;\">Easy to achieve UX consistency<\/p>\n<\/td>\n<td>\n<p style=\"text-align: left;\">Lockstep release process \u2013 the whole bundle must be recompiled and deployed<\/p>\n<p style=\"text-align: left;\">Limited to one framework<\/p>\n<\/td>\n<td style=\"text-align: center;\">Use only for small projects (no more than three teams) only if other options seems to be to much complicated<\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">SSI\/ESI<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Server-side integration<\/span><\/td>\n<td>\n<p style=\"text-align: center;\"><span style=\"font-weight: 400;\">SSI \u2013 NGINX, Apache Http<\/span><\/p>\n<p style=\"text-align: center;\"><span style=\"font-weight: 400;\">ESI \u2013 Varnish, Squid<\/span><\/p>\n<\/td>\n<td>\n<p style=\"text-align: left;\"><span style=\"font-weight: 400;\">Easy to setup \u2013 HTTP servers and cashes are part of every web application architecture<\/span><\/p>\n<p style=\"text-align: left;\"><span style=\"font-weight: 400;\">Full independency of deployments\u00a0<\/span><\/p>\n<\/td>\n<td>\n<p style=\"text-align: left;\"><span style=\"font-weight: 400;\">Lack of cross-component communication \u2013 it must be solved in another way<\/span><\/p>\n<p style=\"text-align: left;\"><span style=\"font-weight: 400;\">Hard to achieve consistent UX look &amp; feel<\/span><\/p>\n<p style=\"text-align: left;\"><span style=\"font-weight: 400;\">Lack of build in authentication and authorization<\/span><\/p>\n<\/td>\n<td style=\"text-align: center;\"><span style=\"font-weight: 400;\">Use for eCommerce like web applications when microservices with less fluctuating application and services architecture<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Specialized micro frontends middleware<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Server-side integration<\/span><\/td>\n<td>\n<p style=\"text-align: center;\"><span style=\"font-weight: 400;\">Zalando\u2019s Mosaic,\u00a0<\/span><\/p>\n<p style=\"text-align: center;\"><span style=\"font-weight: 400;\">Compoxure, micro-fe<\/span><\/p>\n<\/td>\n<td>\n<p style=\"text-align: left;\"><span style=\"font-weight: 400;\">Full independency of deployments<\/span><\/p>\n<p style=\"text-align: left;\"><span style=\"font-weight: 400;\">Excellent control over page performance and failover<\/span><\/p>\n<p style=\"text-align: left;\"><span style=\"font-weight: 400;\">Built-in advanced dynamic routing with autodiscovery<\/span><\/p>\n<\/td>\n<td>\n<p style=\"text-align: left;\"><span style=\"font-weight: 400;\">Hard to setup \u2013 requires additional components<\/span><\/p>\n<p style=\"text-align: left;\"><span style=\"font-weight: 400;\">Lack of cross-component communication \u2013 it must be solved otherway<\/span><\/p>\n<p style=\"text-align: left;\"><span style=\"font-weight: 400;\">Hard to achieve consistent UX look &amp; feel<\/span><\/p>\n<p style=\"text-align: left;\"><span style=\"font-weight: 400;\">Lack of build in authentication and authorization<\/span><\/p>\n<\/td>\n<td style=\"text-align: center;\"><span style=\"font-weight: 400;\">Use for eCommerce like web applications when microservices with high fluctuation of application and services architecture<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Iframes<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Client-side integration<\/span><\/td>\n<td><\/td>\n<td>\n<p style=\"text-align: left;\"><span style=\"font-weight: 400;\">Easy to setup \u2013 no additional tools needed<\/span><\/p>\n<p style=\"text-align: left;\"><span style=\"font-weight: 400;\">Full independency of deployments<\/span><\/p>\n<p style=\"text-align: left;\"><span style=\"font-weight: 400;\">High component isolation<\/span><\/p>\n<p style=\"text-align: left;\"><span style=\"font-weight: 400;\">Cross-component communication<\/span><\/p>\n<p style=\"text-align: left;\"><span style=\"font-weight: 400;\">Real framework agnostic\u00a0\u00a0<\/span><\/p>\n<\/td>\n<td>\n<p style=\"text-align: left;\"><span style=\"font-weight: 400;\">Hard to implement deep-linking<\/span><\/p>\n<p style=\"text-align: left;\"><span style=\"font-weight: 400;\">Hard to implement RWD<\/span><\/p>\n<p style=\"text-align: left;\"><span style=\"font-weight: 400;\">High resources consumption\u00a0<\/span><\/p>\n<\/td>\n<td style=\"text-align: center;\"><span style=\"font-weight: 400;\">Use when framework agnostic and component isolation is the key concern and UX is not so important<\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><span style=\"font-weight: 400;\">Micro frontend framework<\/span><\/td>\n<td style=\"text-align: left;\"><span style=\"font-weight: 400;\">Client-side integration<\/span><\/td>\n<td style=\"text-align: center;\"><span style=\"font-weight: 400;\">Single SPA<\/span><\/td>\n<td style=\"text-align: left;\"><span style=\"font-weight: 400;\">Full integration between micro frontends and container application<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Support for all major JS frameworks<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Lazy loading<\/span><\/td>\n<td style=\"text-align: center;\"><span style=\"font-weight: 400;\">Not well documented engine<\/span><\/td>\n<td>\n<p style=\"text-align: center;\"><span style=\"font-weight: 400;\">Use in rich application composed of many communicated micro frontends<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Source: <a href=\"https:\/\/bluesoft.com\/micro-frontends-the-missing-piece-of-the-puzzle-in-feature-teams\/\" target=\"_blank\" rel=\"noopener\">https:\/\/bluesoft.com\/micro-frontends-the-missing-piece-of-the-puzzle-in-feature-teams\/<\/a><\/p>\n<h2>Iframe<\/h2>\n<p>As a conclusion, let&#8217;s take a look at a rather interesting diagram that summarizes the possibilities of implementing a project using a micro-frontend architecture approach Iframe:<\/p>\n<ul>\n<li><span style=\"font-weight: 400;\">Build-time composition.<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Server-side composition.<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Client-side composition.<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Route composition.<\/span><\/li>\n<\/ul>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-4960 size-large\" src=\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/micro-front-end-4-01-1-1024x606.png\" alt=\"iframe\" width=\"640\" height=\"379\" srcset=\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/micro-front-end-4-01-1-1024x606.png 1024w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/micro-front-end-4-01-1-300x178.png 300w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/micro-front-end-4-01-1-768x454.png 768w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/micro-front-end-4-01-1.png 1200w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Source: <a href=\"https:\/\/www.it-labs.com\/micro-frontends\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.it-labs.com\/micro-frontends\/<\/a><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>Iframes<\/b><\/p>\n<p><span style=\"font-weight: 400;\">We have mentioned some of these opportunities in recent blog posts.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">A rather interesting but old alternative is to choose the implementation as Iframes.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Of course, everything has its advantages and disadvantages.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">One undeniable disadvantage when choosing this type of solution is the security level.<\/span><\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-4952 size-large\" src=\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/grafiki_blog_5_Obszar-roboczy-1-kopia-20-1024x530.png\" alt=\"a man is writting some programming code\" width=\"640\" height=\"331\" srcset=\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/grafiki_blog_5_Obszar-roboczy-1-kopia-20-1024x530.png 1024w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/grafiki_blog_5_Obszar-roboczy-1-kopia-20-300x155.png 300w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/grafiki_blog_5_Obszar-roboczy-1-kopia-20-768x398.png 768w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/grafiki_blog_5_Obszar-roboczy-1-kopia-20.png 1282w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">This solution will not work in large advanced projects on which teams of programmers will be working, it is rather an addition, an opportunity to do some home project to improve your skills or familiarize yourself with something that has already existed for a long time.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Another issue with choosing this solution is cookie sharing, it only works if your internal spa is on the same domain. And last but not least, apart from the problems of maintaining a common language, styling or proper management of mechanisms that are found in downstream components.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Sometimes when we want to display an external page we may get an error of being able to display it as an iframe: <\/span><span style=\"font-weight: 400;\">&#8220;refused to display a frame because it set &#8216;X-Frame-Options&#8217; to &#8216;SAMEORIGIN&#8217;\u201c.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If the site is in our domain or we have the ability to change the configuration, it is enough to change it (of course, depending on the environment we use and technology).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">On apache to edit security.conf:<\/span><\/p>\n<pre><span style=\"font-weight: 400;\">nano \/etc\/apache2\/conf-enabled\/security.conf<\/span><\/pre>\n<p><span style=\"font-weight: 400;\">set:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Header set X-Frame-Options: &#8220;sameorigin&#8221;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">enable mod_headers:<\/span><\/p>\n<pre><span style=\"font-weight: 400;\">cd \/etc\/apache2\/mods-enabled<\/span><\/pre>\n<pre><span style=\"font-weight: 400;\">ln -s ..\/mods-available\/headers.load headers.load<\/span><\/pre>\n<p><span style=\"font-weight: 400;\">restart Apache:<\/span><\/p>\n<pre><span style=\"font-weight: 400;\">service apache2 restart<\/span><\/pre>\n<p><span style=\"font-weight: 400;\">Let\u2019s look a sample code:<br \/>\n<\/span><\/p>\n<pre><span style=\"font-weight: 400;\">&lt;html&gt;<\/span>\r\n\r\n<span style=\"font-weight: 400;\">     &lt;body&gt;<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400;\">&lt;iframe src=\"https:\/\/www.facebook.com\"&gt;&lt;\/iframe&gt;<\/span>\r\n\r\n<span style=\"font-weight: 400;\">     &lt;\/body&gt;<\/span>\r\n\r\n<span style=\"font-weight: 400;\">&lt;\/html&gt;\r\n\r\n<\/span><\/pre>\n<p><span style=\"font-weight: 400;\">The above-mentioned code will make it possible to display a document (in this case the page https:\/\/www.facebook.com&#8221; embedded in the main HTML document.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">With this approach we can display other external sites like youtube on our HTML page.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If we wanted our other HTML documents from the same domain to be displayed in the iframe, we would do this using the event bus implementation and Message Event (communication between window object):<\/span><\/p>\n<p><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Window\/postMess\" target=\"_blank\" rel=\"noopener\">https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Window\/postMess<\/a><\/p>\n<p><span style=\"font-weight: 400;\">We can use ready-made libraries that extend the capabilities of iframes e.g. for React we have prepared <\/span><span style=\"font-weight: 400;\">a library:<\/span><\/p>\n<p><span style=\"font-weight: 400;\"> <a href=\"https:\/\/www.npmjs.com\/package\/react-iframe\" target=\"_blank\" rel=\"noopener\">https:\/\/www.npmjs.com\/package\/react-iframe<\/a><\/span><\/p>\n<pre><span style=\"font-weight: 400;\">import Iframe from 'react-iframe'.<\/span>\r\n\r\n<span style=\"font-weight: 400;\">&lt;Iframe url=\"http:\/\/www.youtube.com\/embed\/xDMP3i36naA\"<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400;\">width=\"450px\"<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400;\">height=\"450px\"<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400;\">id=\"myId\"<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400;\">className=\"myClassname\"<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400;\">display=\"initial\"<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400;\">position=\"relative\"\/&gt;<\/span><\/pre>\n<p><span style=\"font-weight: 400;\">Properties:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">url (required) &#8211; string the iframe url.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><br \/>\nAll other attributes are optional:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">src &#8211; string if set, overrides url.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">scrolling &#8211; string not set if not provided (deprecated in HTML5).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">overflow &#8211; string default to &#8220;hidden&#8221;.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">loading &#8211; string (not added to DOM if not provided).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">frameBorder &#8211; number default to &#8220;0&#8221; (deprecated in HTML5).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">position &#8211; string (not added to DOM if not provided).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">id &#8211; string if set, adds the id parameter with the given value.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">className &#8211; string if set, adds the class parameter with the given value.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">display &#8211; string defaults to &#8220;block&#8221;.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">height &#8211; string (1px &gt; any number above 0, or 1% to 100%).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">width &#8211; string (1px &gt; any number above 0, or 1% to 100%).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">allowFullScreen &#8211; if set, applies the allowFullScreen param (deprecated in HTML5). If set, adds allow=&#8221;fullscreen&#8221;.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">sandbox &#8211; add optional sandbox values (&#8220;allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-top-navigation&#8221;).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">allow &#8211; add optional allow values (&#8220;geolocation microphone camera midi encrypted-media &amp; more&#8221;).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">styles &#8211; add any additional styles here. Will (intentionally) override any of the props above.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><br \/>\nSummary: Iframes are the HTML documents that can be embedded inside another HTML document.<\/span><\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-4951 size-large\" src=\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/grafiki_blog_5_Obszar-roboczy-1-kopia-19-1024x530.jpg\" alt=\"two men are programming\" width=\"640\" height=\"331\" srcset=\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/grafiki_blog_5_Obszar-roboczy-1-kopia-19-1024x530.jpg 1024w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/grafiki_blog_5_Obszar-roboczy-1-kopia-19-300x155.jpg 300w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/grafiki_blog_5_Obszar-roboczy-1-kopia-19-768x398.jpg 768w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/grafiki_blog_5_Obszar-roboczy-1-kopia-19.jpg 1282w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/p>\n<h2>Summary<\/h2>\n<p><span style=\"font-weight: 400;\">We are coming to the end of this series that introduced us to the world of the micro-frontend approach. Our journey is not over, it is just beginning. It is time to put the knowledge and skills we have acquired into practice. Remember also that approaching the solution architecture in this way is not good for all projects and challenges. A prudent and responsible approach to architecture design with or without the use of micro-frontend is certainly recommended and desirable.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">We will certainly see in other interesting series about the world of IT, programming or interesting mechanisms, approaches to creating architecture solutions.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">I send interesting positions on which you should have a look, they will give you a different perspective on the subject and broaden your knowledge and make our skills in the approach in the architecture of micro-frontend definitely increase.<\/span><\/p>\n<ul>\n<li><span style=\"font-weight: 400;\">Building Micro-Frontends by Luca Mezzalira.<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Micro Frontends in Action Michael Geers.<\/span><\/li>\n<li><span style=\"font-weight: 400;\">The Art of Micro Frontends: Build websites using compositional UIs that grow naturally as your application scales.<\/span><\/li>\n<li><a href=\"https:\/\/martinfowler.com\/articles\/micro-frontends.html\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">https:\/\/martinfowler.com\/articles\/micro-frontends.html.<\/span><\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Introduction We start the last chapter by discussing the design approach, the micro-frontend implementation, and the capabilities it offers. All of the information we found in the three articles on micro-frontend should be treated as a serious introduction to the topic. Read also: Introduction To Micro Frontend. Part I Read also: Micro Frontend \u2013 Deep [&hellip;]<\/p>\n","protected":false},"author":25,"featured_media":4950,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[13],"tags":[153,138,131],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v16.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Micro Frontend - The Final Step. Part III - Evertop<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Micro Frontend - The Final Step. Part III - Evertop\" \/>\n<meta property=\"og:description\" content=\"Introduction We start the last chapter by discussing the design approach, the micro-frontend implementation, and the capabilities it offers. All of the information we found in the three articles on micro-frontend should be treated as a serious introduction to the topic. Read also: Introduction To Micro Frontend. Part I Read also: Micro Frontend \u2013 Deep [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/\" \/>\n<meta property=\"og:site_name\" content=\"Evertop\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/EvertopPoland\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-07-14T09:31:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-07-18T14:24:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/grafiki_blog_5_Obszar-roboczy-1-kopia-18.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1282\" \/>\n\t<meta property=\"og:image:height\" content=\"664\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Rafa\u0142 Czarkowski\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.evertop.pl\/#organization\",\"name\":\"Evertop\",\"url\":\"https:\/\/www.evertop.pl\/\",\"sameAs\":[\"https:\/\/www.facebook.com\/EvertopPoland\/\",\"https:\/\/www.linkedin.com\/company\/evertop-software-development\/\"],\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.evertop.pl\/#logo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/logo_new.png\",\"contentUrl\":\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/logo_new.png\",\"width\":582,\"height\":114,\"caption\":\"Evertop\"},\"image\":{\"@id\":\"https:\/\/www.evertop.pl\/#logo\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.evertop.pl\/#website\",\"url\":\"https:\/\/www.evertop.pl\/\",\"name\":\"Evertop\",\"description\":\"we code the future\",\"publisher\":{\"@id\":\"https:\/\/www.evertop.pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.evertop.pl\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/grafiki_blog_5_Obszar-roboczy-1-kopia-18.png\",\"contentUrl\":\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/grafiki_blog_5_Obszar-roboczy-1-kopia-18.png\",\"width\":1282,\"height\":664,\"caption\":\"micro-frontend\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/#webpage\",\"url\":\"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/\",\"name\":\"Micro Frontend - The Final Step. Part III - Evertop\",\"isPartOf\":{\"@id\":\"https:\/\/www.evertop.pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/#primaryimage\"},\"datePublished\":\"2021-07-14T09:31:40+00:00\",\"dateModified\":\"2021-07-18T14:24:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\\u0142\\u00f3wna\",\"item\":\"https:\/\/www.evertop.pl\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Micro Frontend &#8211; The Final Step. Part III\"}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/#webpage\"},\"author\":{\"@id\":\"https:\/\/www.evertop.pl\/#\/schema\/person\/05241f55b0571cacd73a963a945799ca\"},\"headline\":\"Micro Frontend &#8211; The Final Step. Part III\",\"datePublished\":\"2021-07-14T09:31:40+00:00\",\"dateModified\":\"2021-07-18T14:24:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/#webpage\"},\"wordCount\":1123,\"publisher\":{\"@id\":\"https:\/\/www.evertop.pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/grafiki_blog_5_Obszar-roboczy-1-kopia-18.png\",\"keywords\":[\"micro frontend\",\"web development\",\"web frameworks\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.evertop.pl\/#\/schema\/person\/05241f55b0571cacd73a963a945799ca\",\"name\":\"Rafa\\u0142 Czarkowski\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.evertop.pl\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1474254019b2d4c12001a795c72aa336?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1474254019b2d4c12001a795c72aa336?s=96&d=mm&r=g\",\"caption\":\"Rafa\\u0142 Czarkowski\"},\"url\":\"https:\/\/www.evertop.pl\/en\/author\/rczarkowski\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Micro Frontend - The Final Step. Part III - Evertop","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/","og_locale":"en_US","og_type":"article","og_title":"Micro Frontend - The Final Step. Part III - Evertop","og_description":"Introduction We start the last chapter by discussing the design approach, the micro-frontend implementation, and the capabilities it offers. All of the information we found in the three articles on micro-frontend should be treated as a serious introduction to the topic. Read also: Introduction To Micro Frontend. Part I Read also: Micro Frontend \u2013 Deep [&hellip;]","og_url":"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/","og_site_name":"Evertop","article_publisher":"https:\/\/www.facebook.com\/EvertopPoland\/","article_published_time":"2021-07-14T09:31:40+00:00","article_modified_time":"2021-07-18T14:24:02+00:00","og_image":[{"width":1282,"height":664,"url":"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/grafiki_blog_5_Obszar-roboczy-1-kopia-18.png","path":"\/home\/evertop\/web-evertop\/wp-content\/uploads\/2021\/07\/grafiki_blog_5_Obszar-roboczy-1-kopia-18.png","size":"full","id":4950,"alt":"micro-frontend","pixels":851248,"type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Written by":"Rafa\u0142 Czarkowski","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Organization","@id":"https:\/\/www.evertop.pl\/#organization","name":"Evertop","url":"https:\/\/www.evertop.pl\/","sameAs":["https:\/\/www.facebook.com\/EvertopPoland\/","https:\/\/www.linkedin.com\/company\/evertop-software-development\/"],"logo":{"@type":"ImageObject","@id":"https:\/\/www.evertop.pl\/#logo","inLanguage":"en-US","url":"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/logo_new.png","contentUrl":"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/04\/logo_new.png","width":582,"height":114,"caption":"Evertop"},"image":{"@id":"https:\/\/www.evertop.pl\/#logo"}},{"@type":"WebSite","@id":"https:\/\/www.evertop.pl\/#website","url":"https:\/\/www.evertop.pl\/","name":"Evertop","description":"we code the future","publisher":{"@id":"https:\/\/www.evertop.pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.evertop.pl\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"ImageObject","@id":"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/#primaryimage","inLanguage":"en-US","url":"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/grafiki_blog_5_Obszar-roboczy-1-kopia-18.png","contentUrl":"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/grafiki_blog_5_Obszar-roboczy-1-kopia-18.png","width":1282,"height":664,"caption":"micro-frontend"},{"@type":"WebPage","@id":"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/#webpage","url":"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/","name":"Micro Frontend - The Final Step. Part III - Evertop","isPartOf":{"@id":"https:\/\/www.evertop.pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/#primaryimage"},"datePublished":"2021-07-14T09:31:40+00:00","dateModified":"2021-07-18T14:24:02+00:00","breadcrumb":{"@id":"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/www.evertop.pl\/en\/"},{"@type":"ListItem","position":2,"name":"Micro Frontend &#8211; The Final Step. Part III"}]},{"@type":"Article","@id":"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/#article","isPartOf":{"@id":"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/#webpage"},"author":{"@id":"https:\/\/www.evertop.pl\/#\/schema\/person\/05241f55b0571cacd73a963a945799ca"},"headline":"Micro Frontend &#8211; The Final Step. Part III","datePublished":"2021-07-14T09:31:40+00:00","dateModified":"2021-07-18T14:24:02+00:00","mainEntityOfPage":{"@id":"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/#webpage"},"wordCount":1123,"publisher":{"@id":"https:\/\/www.evertop.pl\/#organization"},"image":{"@id":"https:\/\/www.evertop.pl\/en\/the-final-stage-of-micro-frontends-part-iii\/#primaryimage"},"thumbnailUrl":"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/07\/grafiki_blog_5_Obszar-roboczy-1-kopia-18.png","keywords":["micro frontend","web development","web frameworks"],"articleSection":["Blog"],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.evertop.pl\/#\/schema\/person\/05241f55b0571cacd73a963a945799ca","name":"Rafa\u0142 Czarkowski","image":{"@type":"ImageObject","@id":"https:\/\/www.evertop.pl\/#personlogo","inLanguage":"en-US","url":"https:\/\/secure.gravatar.com\/avatar\/1474254019b2d4c12001a795c72aa336?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1474254019b2d4c12001a795c72aa336?s=96&d=mm&r=g","caption":"Rafa\u0142 Czarkowski"},"url":"https:\/\/www.evertop.pl\/en\/author\/rczarkowski\/"}]}},"_links":{"self":[{"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/posts\/4947"}],"collection":[{"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/users\/25"}],"replies":[{"embeddable":true,"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/comments?post=4947"}],"version-history":[{"count":26,"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/posts\/4947\/revisions"}],"predecessor-version":[{"id":4984,"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/posts\/4947\/revisions\/4984"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/media\/4950"}],"wp:attachment":[{"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/media?parent=4947"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/categories?post=4947"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/tags?post=4947"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}