{"id":12267,"date":"2021-02-23T15:23:24","date_gmt":"2021-02-23T14:23:24","guid":{"rendered":"https:\/\/blog.mi.hdm-stuttgart.de\/?p=12267"},"modified":"2023-06-18T18:07:18","modified_gmt":"2023-06-18T16:07:18","slug":"__trashed","status":"publish","type":"post","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/23\/__trashed\/","title":{"rendered":"Micro Frontends: Benefits of Webpack 5 Module Federation &#8211; A comparison"},"content":{"rendered":"\n<p>In this article I am going to have a look at the benefits of module federation in micro frontends with Webpack 5. We will be creating two similar micro frontend websites using two different approaches and compare the amount of resources that will be transferred over the network. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Short overview of micro frontend approach:<\/h4>\n\n\n\n<p>The micro frontend concept aims to separate modern websites (main page) into smaller components that are individually hosted as webpages (component page) themselves. A component is dependent on the context and could a whole feature, for instance a shopping cart, or just an element that will be used on the main page like a button.<\/p>\n\n\n\n<p>This approach is similar to micro services approach and the usage strongly dependent on context and development capabilities, while an ideal implementation offers several benefits as it offers the possibility to use various technologies within a single website or have independent teams working on autonomous parts of a complex site. Of course there are also downsides to this approach, one of them being possibly duplicated resources and large overheads when it comes to integrating component pages. Module Federation promises the tackle the issue of duplicated dependencies for projects that are built with Webpack 5. <\/p>\n\n\n\n<p>To elaborate I am going to build a site using  custom html elements approach  and then use module federation approach to create the same exact site and compare them.<\/p>\n\n\n\n<p>The code I will be referring to is located at: <\/p>\n\n\n\n<p>Module Federation Approach: <a href=\"https:\/\/gitlab.mi.hdm-stuttgart.de\/du009\/modulefederationfrontends\">https:\/\/gitlab.mi.hdm-stuttgart.de\/du009\/modulefederationfrontends<\/a><\/p>\n\n\n\n<p>HTML 5 Custom Elements Approach: <a href=\"https:\/\/gitlab.mi.hdm-stuttgart.de\/du009\/microends.git\">https:\/\/gitlab.mi.hdm-stuttgart.de\/du009\/microends.git<\/a><\/p>\n\n\n\n<p>Since my primary focus is to inspect the resource size between those two approaches and introduce the concepts in general, I might not go into great detail about the implementation. Instead I will try to explain the crucial steps briefly.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Example page we want to create: <\/h4>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-large is-resized\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Screenshot-2021-02-23-at-12.13.16.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"12395\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/23\/__trashed\/screenshot-2021-02-23-at-12-13-16\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Screenshot-2021-02-23-at-12.13.16.png\" data-orig-size=\"2880,1426\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Screenshot-2021-02-23-at-12.13.16\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Screenshot-2021-02-23-at-12.13.16-1024x507.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Screenshot-2021-02-23-at-12.13.16-1024x507.png\" alt=\"\" class=\"wp-image-12395\" width=\"698\" height=\"345\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Screenshot-2021-02-23-at-12.13.16-1024x507.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Screenshot-2021-02-23-at-12.13.16-300x149.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Screenshot-2021-02-23-at-12.13.16-768x380.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Screenshot-2021-02-23-at-12.13.16-1536x761.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Screenshot-2021-02-23-at-12.13.16-2048x1014.png 2048w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/a><figcaption>Example micro frontend webstore<\/figcaption><\/figure><\/div>\n\n\n\n<p>As you can see, we have 2 different websites included into 1 containing website:<\/p>\n\n\n\n<p class=\"has-text-color\" style=\"color:#0061ff\">Container (main page) &#8211; Host <\/p>\n\n\n\n<p class=\"has-text-color\" style=\"color:#96d35f\">ProductDetails (component page) &#8211; Component <\/p>\n\n\n\n<p class=\"has-text-color\" style=\"color:#b92d5d\">ExploreProducts (component page) &#8211; Component <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Approach without module federation: A react micro frontend using HTML Custom Elements to share components between host and consumer applications.<\/h3>\n\n\n\n<p>HTML Custom Elements approach is one way to implement micro frontends. The Component (component page) we want to share with our host application (main page) is going to be rendered through a custom defined HTML tag. <\/p>\n\n\n\n<p>Our first step is to create the <span style=\"color:#96d35f\" class=\"has-inline-color\">ProductDetails<\/span> component itself, which is going to be simple React component. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetailcutosm.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"767\" data-attachment-id=\"12407\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/23\/__trashed\/productdetailcutosm\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetailcutosm.png\" data-orig-size=\"1602,1200\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"productdetailcutosm\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetailcutosm-1024x767.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetailcutosm-1024x767.png\" alt=\"\" class=\"wp-image-12407\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetailcutosm-1024x767.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetailcutosm-300x225.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetailcutosm-768x575.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetailcutosm-1536x1151.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetailcutosm.png 1602w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>productDetail.js<\/figcaption><\/figure>\n\n\n\n<p>In the next step, we need to create a shell that provides the HTML Element. We create a custom javascript class that extends from HTML Element and therefore inherits certain methods. One of those methods that we need to overwrite is <code class=\"\" data-line=\"\">connectedCallback()<\/code>. This method is called once the custom tag occurs in our main application and should include the initialisation logic of our component. In a more complex case, our component could fetch data or even include further components. In this example we are simply going to return our previously created React component. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetilapp.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"12408\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/23\/__trashed\/productdetilapp\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetilapp.png\" data-orig-size=\"1612,3000\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"productdetilapp\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetilapp-550x1024.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetilapp-550x1024.png\" alt=\"\" class=\"wp-image-12408\" width=\"576\" height=\"1073\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetilapp-550x1024.png 550w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetilapp-161x300.png 161w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetilapp-768x1429.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetilapp-825x1536.png 825w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetilapp-1100x2048.png 1100w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetilapp.png 1612w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><\/a><figcaption>App.js of ProductDetail<\/figcaption><\/figure>\n\n\n\n<p>An important thing to note: in this approach, stylesheets are not automatically shared between the component and our main page. We have to dynamically insert a html style element into the DOM that contains the styling we want on our component (line 7 includes the css as string, line 53 inserts css into our created style tag). <\/p>\n\n\n\n<p>To have an idea of what our component looks like, we are going to serve it locally. Webpack bundles our component (or application) and provides a development server. Bundling and server configurations are specified in our webpack configuration <code class=\"\" data-line=\"\">webpack.config.json<\/code><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/webpack-product-detail.png\"><img loading=\"lazy\" decoding=\"async\" width=\"839\" height=\"1024\" data-attachment-id=\"12400\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/23\/__trashed\/webpack-product-detail\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/webpack-product-detail.png\" data-orig-size=\"1456,1776\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"webpack-product-detail\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/webpack-product-detail-839x1024.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/webpack-product-detail-839x1024.png\" alt=\"\" class=\"wp-image-12400\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/webpack-product-detail-839x1024.png 839w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/webpack-product-detail-246x300.png 246w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/webpack-product-detail-768x937.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/webpack-product-detail-1259x1536.png 1259w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/webpack-product-detail.png 1456w\" sizes=\"auto, (max-width: 839px) 100vw, 839px\" \/><\/a><\/figure>\n\n\n\n<p>After running <code class=\"\" data-line=\"\">npm start<\/code> our component is served at <code class=\"\" data-line=\"\">http:\/\/localhost:300<\/code>2 and looks like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/procudt-detail-single.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"537\" data-attachment-id=\"12401\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/23\/__trashed\/procudt-detail-single\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/procudt-detail-single.png\" data-orig-size=\"2718,1426\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"procudt-detail-single\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/procudt-detail-single-1024x537.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/procudt-detail-single-1024x537.png\" alt=\"\" class=\"wp-image-12401\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/procudt-detail-single-1024x537.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/procudt-detail-single-300x157.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/procudt-detail-single-768x403.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/procudt-detail-single-1536x806.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/procudt-detail-single-2048x1074.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>ProductDetail at localhost:3002<\/figcaption><\/figure>\n\n\n\n<p>We now repeat the same procedure for our second component <span style=\"color:#b92d5d\" class=\"has-inline-color\">ExploreProducts<\/span>, which looks like this. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/explore-detail-single.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"508\" data-attachment-id=\"12402\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/23\/__trashed\/explore-detail-single\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/explore-detail-single.png\" data-orig-size=\"2876,1426\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"explore-detail-single\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/explore-detail-single-1024x508.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/explore-detail-single-1024x508.png\" alt=\"\" class=\"wp-image-12402\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/explore-detail-single-1024x508.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/explore-detail-single-300x149.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/explore-detail-single-768x381.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/explore-detail-single-1536x762.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/explore-detail-single-2048x1015.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>ExploreProducts at localhost:3001<\/figcaption><\/figure>\n\n\n\n<p>Once we set up our components, we have to build our <span style=\"color:#0061ff\" class=\"has-inline-color\">host application \/ container (main page)<\/span> and enable it to consume the components we just built. Its going to be a simple React page that includes some logic to fetch our components (l<code class=\"\" data-line=\"\">oadMicrofrontendAsComponent()<\/code>) and then inserts the custom HTML (e.g. <code class=\"\" data-line=\"\">&lt;product-detail&gt;&lt;\/product-detail&gt;<\/code>) tags where we want them to be (line 34 and line 37). <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/custom-host.png\"><img loading=\"lazy\" decoding=\"async\" width=\"748\" height=\"1024\" data-attachment-id=\"12406\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/23\/__trashed\/custom-host\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/custom-host.png\" data-orig-size=\"1612,2208\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"custom-host\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/custom-host-748x1024.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/custom-host-748x1024.png\" alt=\"\" class=\"wp-image-12406\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/custom-host-748x1024.png 748w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/custom-host-219x300.png 219w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/custom-host-768x1052.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/custom-host-1121x1536.png 1121w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/custom-host-1495x2048.png 1495w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/custom-host.png 1612w\" sizes=\"auto, (max-width: 748px) 100vw, 748px\" \/><\/a><figcaption>App.js from container application<\/figcaption><\/figure>\n\n\n\n<p>Once we have all components running locally and start our host application the result will look like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/result.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"510\" data-attachment-id=\"12405\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/23\/__trashed\/result-2\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/result.png\" data-orig-size=\"2878,1432\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"result\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/result-1024x510.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/result-1024x510.png\" alt=\"\" class=\"wp-image-12405\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/result-1024x510.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/result-300x149.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/result-768x382.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/result-1536x764.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/result-2048x1019.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Micro frontend at localhost:3000<\/figcaption><\/figure>\n\n\n\n<p>Upon inspection of the network tab, we can identify our two components being loaded over the network with a respective size of about 1.6 MB. This is quite large, as it includes two completely bundled applications. All dependencies of our components, like <code class=\"\" data-line=\"\">React<\/code> or <code class=\"\" data-line=\"\">React-DOM<\/code> are included in this file. This leads to a problem with micro frontends using this approach: We use the same version of React in both our components, yet we still include the library twice in our host application, producing an unnecessary overhead.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/network-cusdotm-html.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"417\" data-attachment-id=\"12404\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/23\/__trashed\/network-cusdotm-html\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/network-cusdotm-html.png\" data-orig-size=\"2020,822\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"network-cusdotm-html\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/network-cusdotm-html-1024x417.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/network-cusdotm-html-1024x417.png\" alt=\"\" class=\"wp-image-12404\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/network-cusdotm-html-1024x417.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/network-cusdotm-html-300x122.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/network-cusdotm-html-768x313.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/network-cusdotm-html-1536x625.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/network-cusdotm-html.png 2020w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Network inspection of host application at localhost:3000<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Module Federation approach with Webpack 5:  A react micro frontend using Webpack 5 bundling to share components between applications<\/h3>\n\n\n\n<p>In contrast to our first example, we are now going to create the same exact website using Webpack 5 Module Federation. <\/p>\n\n\n\n<p>We will be starting off creating the two components we want to use in our <span style=\"color:#0061ff\" class=\"has-inline-color\">host application (main page)<\/span>: <span style=\"color:#b92d5d\" class=\"has-inline-color\">ExploreProducts<\/span> and <span style=\"color:#96d35f\" class=\"has-inline-color\">ProductDetail<\/span>.<\/p>\n\n\n\n<p>They are the same simple React components and look as follows: <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetailmodule.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"840\" data-attachment-id=\"12412\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/23\/__trashed\/productdetailmodule\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetailmodule.png\" data-orig-size=\"1594,1308\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"productdetailmodule\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetailmodule-1024x840.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetailmodule-1024x840.png\" alt=\"\" class=\"wp-image-12412\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetailmodule-1024x840.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetailmodule-300x246.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetailmodule-768x630.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetailmodule-1536x1260.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/productdetailmodule.png 1594w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>productDetail.js from module federation approach<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/exploreproductsmodule.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"945\" data-attachment-id=\"12413\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/23\/__trashed\/exploreproductsmodule\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/exploreproductsmodule.png\" data-orig-size=\"1612,1488\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"exploreproductsmodule\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/exploreproductsmodule-1024x945.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/exploreproductsmodule-1024x945.png\" alt=\"\" class=\"wp-image-12413\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/exploreproductsmodule-1024x945.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/exploreproductsmodule-300x277.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/exploreproductsmodule-768x709.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/exploreproductsmodule-1536x1418.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/exploreproductsmodule.png 1612w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>exploreProducts.js from module federation approach<\/figcaption><\/figure>\n\n\n\n<p>which produce this result when served locally via Webpack:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduledetail.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"506\" data-attachment-id=\"12414\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/23\/__trashed\/moduledetail\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduledetail.png\" data-orig-size=\"2860,1412\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"moduledetail\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduledetail-1024x506.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduledetail-1024x506.png\" alt=\"\" class=\"wp-image-12414\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduledetail-1024x506.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduledetail-300x148.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduledetail-768x379.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduledetail-1536x758.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduledetail-2048x1011.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>ProductDetail Component at localhost:3003<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduleexplord.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"506\" data-attachment-id=\"12415\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/23\/__trashed\/moduleexplord\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduleexplord.png\" data-orig-size=\"2878,1422\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"moduleexplord\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduleexplord-1024x506.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduleexplord-1024x506.png\" alt=\"\" class=\"wp-image-12415\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduleexplord-1024x506.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduleexplord-300x148.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduleexplord-768x379.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduleexplord-1536x759.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduleexplord-2048x1012.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>ExploreProducts Component at localhost:3002<\/figcaption><\/figure>\n\n\n\n<p>In order to enable our components to be consumed by a host application, we have to include the Module Federation Plugin into our Webpack 5 configuration and specify the name of our component (line 40) as well as tell the plugin where it can find the component we want to provide (line 44). <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduleprodcutdetailwebpack.png\"><img loading=\"lazy\" decoding=\"async\" width=\"727\" height=\"1024\" data-attachment-id=\"12418\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/23\/__trashed\/moduleprodcutdetailwebpack\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduleprodcutdetailwebpack.png\" data-orig-size=\"1594,2244\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"moduleprodcutdetailwebpack\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduleprodcutdetailwebpack-727x1024.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduleprodcutdetailwebpack-727x1024.png\" alt=\"\" class=\"wp-image-12418\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduleprodcutdetailwebpack-727x1024.png 727w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduleprodcutdetailwebpack-213x300.png 213w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduleprodcutdetailwebpack-768x1081.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduleprodcutdetailwebpack-1091x1536.png 1091w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduleprodcutdetailwebpack-1455x2048.png 1455w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/moduleprodcutdetailwebpack.png 1594w\" sizes=\"auto, (max-width: 727px) 100vw, 727px\" \/><\/a><figcaption>webpack.config.json for product detail component<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/modulewebpackexploreproducts.png\"><img loading=\"lazy\" decoding=\"async\" width=\"736\" height=\"1024\" data-attachment-id=\"12419\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/23\/__trashed\/modulewebpackexploreproducts\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/modulewebpackexploreproducts.png\" data-orig-size=\"1612,2244\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"modulewebpackexploreproducts\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/modulewebpackexploreproducts-736x1024.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/modulewebpackexploreproducts-736x1024.png\" alt=\"\" class=\"wp-image-12419\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/modulewebpackexploreproducts-736x1024.png 736w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/modulewebpackexploreproducts-216x300.png 216w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/modulewebpackexploreproducts-768x1069.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/modulewebpackexploreproducts-1103x1536.png 1103w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/modulewebpackexploreproducts-1471x2048.png 1471w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/modulewebpackexploreproducts.png 1612w\" sizes=\"auto, (max-width: 736px) 100vw, 736px\" \/><\/a><figcaption>webpack.config.json for explore products component<\/figcaption><\/figure>\n\n\n\n<p>Now we have to build our host application and specify the remote components we want to import in its webpack configuration. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/containerappmodule.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"899\" data-attachment-id=\"12427\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/23\/__trashed\/containerappmodule\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/containerappmodule.png\" data-orig-size=\"1612,1416\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"containerappmodule\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/containerappmodule-1024x899.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/containerappmodule-1024x899.png\" alt=\"\" class=\"wp-image-12427\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/containerappmodule-1024x899.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/containerappmodule-300x264.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/containerappmodule-768x675.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/containerappmodule-1536x1349.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/containerappmodule.png 1612w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>App.js of container application<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/appcontainerwebpack.png\"><img loading=\"lazy\" decoding=\"async\" width=\"625\" height=\"1024\" data-attachment-id=\"12428\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/23\/__trashed\/appcontainerwebpack\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/appcontainerwebpack.png\" data-orig-size=\"1612,2640\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"appcontainerwebpack\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/appcontainerwebpack-625x1024.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/appcontainerwebpack-625x1024.png\" alt=\"\" class=\"wp-image-12428\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/appcontainerwebpack-625x1024.png 625w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/appcontainerwebpack-183x300.png 183w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/appcontainerwebpack-768x1258.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/appcontainerwebpack-938x1536.png 938w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/appcontainerwebpack-1251x2048.png 1251w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/appcontainerwebpack.png 1612w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/a><figcaption>webpack.config.json from app container<\/figcaption><\/figure>\n\n\n\n<p>Once we served all our components and the host application via <code class=\"\" data-line=\"\">npm start <\/code>we can now see our micro frontend running at <code class=\"\" data-line=\"\">localhost:3001<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/result-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"510\" data-attachment-id=\"12443\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/23\/__trashed\/result-1\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/result-1.png\" data-orig-size=\"2878,1432\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"result-1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/result-1-1024x510.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/result-1-1024x510.png\" alt=\"\" class=\"wp-image-12443\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/result-1-1024x510.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/result-1-300x149.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/result-1-768x382.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/result-1-1536x764.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/result-1-2048x1019.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>micro frontend at localhost:3001<\/figcaption><\/figure>\n\n\n\n<p>If we open the network inspector we can identify the requests that load our remotely hosted components. The remote entry files for each component (<code class=\"\" data-line=\"\">remoteEntry.js<\/code>) as well as the components themselves (<code class=\"\" data-line=\"\">src_exploreProducts_js.js <\/code>and<code class=\"\" data-line=\"\"> src_productDetail_js.js<\/code>) are requested over the network. Additionally some requests to handle sharing and versioning of the dependencies specified as shared in the webpack configs of the remotes. If we compare the sizes of the response data to the size of response data used in the custom elements approach, we can immediately see that even tough there are more requests in module federation, the total size is much smaller. This will most likely result in generally faster loading times for micro frontends built with this approach.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Screenshot-2021-02-23-at-14.41.11.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"401\" data-attachment-id=\"12441\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/23\/__trashed\/screenshot-2021-02-23-at-14-41-11\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Screenshot-2021-02-23-at-14.41.11.png\" data-orig-size=\"2238,876\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Screenshot-2021-02-23-at-14.41.11\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Screenshot-2021-02-23-at-14.41.11-1024x401.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Screenshot-2021-02-23-at-14.41.11-1024x401.png\" alt=\"\" class=\"wp-image-12441\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Screenshot-2021-02-23-at-14.41.11-1024x401.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Screenshot-2021-02-23-at-14.41.11-300x117.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Screenshot-2021-02-23-at-14.41.11-768x301.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Screenshot-2021-02-23-at-14.41.11-1536x601.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Screenshot-2021-02-23-at-14.41.11-2048x802.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Conclusion<\/h3>\n\n\n\n<p>Webpack 5 Module Federation is a really useful, yet still somewhat complex approach to implement micro frontends. It offers huge potential when creating distributed applications and managing custom components or dependencies that are supposed to be shared across different parts of the application. <\/p>\n\n\n\n<p>In general there are many ways to implement micro frontends and share components between applications and part of the development process should be to specify the needs and dependencies that are going to occur in the project and choose implementations based on the results. <\/p>\n\n\n\n<p>In this article I showcased a really narrow and not complex example of two different approaches when it comes to implementing a micro frontend structure. Further resources and details about techniques used in this example can be found at: <\/p>\n\n\n\n<p><a href=\"https:\/\/module-federation.github.io\/\">https:\/\/module-federation.github.io\/<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/module-federation\/module-federation-examples\">https:\/\/github.com\/module-federation\/module-federation-examples<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/medium.com\/@gilfink\/wrapping-react-components-inside-custom-elements-97431d1155bd\">https:\/\/medium.com\/@gilfink\/wrapping-react-components-inside-custom-elements-97431d1155bd&#8221;&gt;https:\/\/medium.com\/@gilfink\/wrapping-react-components-inside-custom-elements-97431d1155bd<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this article I am going to have a look at the benefits of module federation in micro frontends with Webpack 5. We will be creating two similar micro frontend websites using two different approaches and compare the amount of resources that will be transferred over the network. Short overview of micro frontend approach: The [&hellip;]<\/p>\n","protected":false},"author":944,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1,649,662],"tags":[409,406,405,407,408],"ppma_author":[798],"class_list":["post-12267","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-interactive-media","category-web-performance","tag-custom-elements","tag-frontend","tag-microfrontend","tag-module-federation","tag-webpack-5"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":3822,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2018\/08\/05\/3822\/","url_meta":{"origin":12267,"position":0},"title":"Web Performance Optimization for Continuous Deployment &#8211; Move fast and don&#8217;t lose performance","author":"Benjamin Kowatsch","date":"5. August 2018","format":false,"excerpt":"The performance of websites today is a decisive factor in how many users visit them and thus how much money can be earned from them. The impact of this fact is further enhanced by the widespread use of mobile devices and the speed of the mobile Internet. To counteract the\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2859,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2017\/08\/31\/iot-with-the-raspberry-pi-final-application-part-3\/","url_meta":{"origin":12267,"position":1},"title":"IoT with the Raspberry Pi \u2013 Final application \u2013 Part 3","author":"mr143@hdm-stuttgart.de","date":"31. August 2017","format":false,"excerpt":"In our final application, we have put together a solution consisting of four different modules. First, we have again the Raspberry Pi which raises and sends the sensor data using the already presented Python script. We changed the transfer protocol in the final application to MQTT, which gives us more\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/08\/mqtt-1024x465.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/08\/mqtt-1024x465.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/08\/mqtt-1024x465.jpg?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":12751,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/28\/industry-4-0-real-time-data-visualization\/","url_meta":{"origin":12267,"position":2},"title":"Industry 4.0 &#8211; Real time data visualization","author":"Philip Betzler","date":"28. February 2021","format":false,"excerpt":"As part of the lecture \"System Engineering and Management\", we worked on a project in cooperation with IBM to visualize Industry 4.0 data in real time using a configuration-based approach. This project aims to avoid needing a web developer every time there is a modification in the data.","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/03\/config_type_harting_mica.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/03\/config_type_harting_mica.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/03\/config_type_harting_mica.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":21653,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/09\/17\/studidash-a-serverless-web-application\/","url_meta":{"origin":12267,"position":3},"title":"&#8220;Studidash&#8221; | A serverless web application","author":"dk119","date":"17. September 2021","format":false,"excerpt":"by Oliver Klein (ok061), Daniel Koch (dk119), Luis B\u00fchler (lb159), Micha Huhn (mh334) Abstract You are probably familiar with the HdM SB-Funktionen. After nearly four semesters we were tired of the boring design and decided to give it a more modern look with a bit more functionality then it currently\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/grafik-1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/grafik-1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/grafik-1.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":12695,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/28\/automate-performance-optimization\/","url_meta":{"origin":12267,"position":4},"title":"Automate Performance Optimization","author":"Amelie Kassner","date":"28. February 2021","format":false,"excerpt":"In order to display a website as quickly as possible, performance optimization is necessary. Since manual optimization can be time-consuming and often several steps need to be performed, automating performance optimization can be a good idea. This in turn can include, for example, reporting (speed analysis of the website) and\u2026","rel":"","context":"In &quot;Interactive Media&quot;","block_context":{"text":"Interactive Media","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/interactive-media\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/PSI_CommandLine-2-150x150.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/PSI_CommandLine-2-150x150.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/PSI_CommandLine-2-150x150.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/PSI_CommandLine-2-150x150.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":28492,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/02\/20\/auswirkung-der-integration-von-ki-auf-den-software-development-lifecycle-mit-fokus-auf-frontend-entwicklung\/","url_meta":{"origin":12267,"position":5},"title":"Auswirkung der Integration von KI auf den Software Development Lifecycle mit Fokus auf Frontend-Entwicklung","author":"Tom Bestvater","date":"20. February 2026","format":false,"excerpt":"Abstract - Die Integration K\u00fcnstlicher Intelligenz (KI) in den Software Development Lifecycle (SDLC) f\u00fchrt zu einer Transformation der Frontend-Entwicklung und verschiebt den Fokus von der manuellen Implementierung hin zur KI-gest\u00fctzten Orchestrierung. Das vorliegende Paper untersucht den Einfluss generativer KI-Modelle und multimodaler Sprachmodelle (MLLMs) auf die Frontend-Engineering-Prozesse, wobei ein besonderer Schwerpunkt\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/02\/sdlc_phases.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/02\/sdlc_phases.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/02\/sdlc_phases.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/02\/sdlc_phases.png?resize=700%2C400&ssl=1 2x"},"classes":[]}],"jetpack_sharing_enabled":true,"authors":[{"term_id":798,"user_id":944,"is_guest":0,"slug":"du009","display_name":"Dominik Utler","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/d3bfebe5f9440c09509649c12c603cc4472248c0d67035d04b4c02b5b97ae9ac?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/12267","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/users\/944"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/comments?post=12267"}],"version-history":[{"count":13,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/12267\/revisions"}],"predecessor-version":[{"id":12448,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/12267\/revisions\/12448"}],"wp:attachment":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/media?parent=12267"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/categories?post=12267"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/tags?post=12267"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/ppma_author?post=12267"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}