{"id":4534,"date":"2021-05-12T11:09:59","date_gmt":"2021-05-12T09:09:59","guid":{"rendered":"https:\/\/www.evertop.pl\/?p=4534"},"modified":"2021-07-14T11:54:54","modified_gmt":"2021-07-14T09:54:54","slug":"introduction-to-micro-frontend-part-i","status":"publish","type":"post","link":"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/","title":{"rendered":"Introduction To Micro Frontend. Part I"},"content":{"rendered":"<h2>1. Introduction, a few words about micro frontend architecture, solution architecture<\/h2>\n<p>Micro frontends are small web applications that are broken down into components or functions that work together to provide a larger application.<\/p>\n<p>If your project is small enough and supported by one team, the better solution will be to choose a monolithic SPA architecture and use one favorite framework such as Angular, React, Vue, Svelte etc. to build the presentation layer.<\/p>\n<p>If the project starts to grow or several teams will work on it, it is definitely worth taking an interest in the micro frontend solution, which will facilitate the work and coordination of micro-projects by individual teams. Each team, according to the project specification, can use a different preferred framework.<\/p>\n<p>Teams can have their own functions and components, work in their own code base and use their own dependencies in the project, release versions independently, constantly deliver small, incremental updates.<\/p>\n<p>When using a micro frontend solution, we must also remember in what contexts they are most beneficial.<\/p>\n<blockquote><p>Martin Fowler defined Micro-Frontend Architecture as &#8220;an architectural style in which independently delivered frontend applications are assembled into a larger whole.&#8221;<\/p><\/blockquote>\n<p>Also, remember that everything has its advantages and disadvantages.<\/p>\n<p>Choose solutions to the needs of the project carefully.<\/p>\n<h2>2. Theory in application, what problems it solves, micro frontend vs monolith SPA<\/h2>\n<p>Let&#8217;s look at the simplified diagram below, which will tell us a lot about the architecture of the solution and the approach to micro-applications and these components.<\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-4565 size-large\" src=\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-42-1024x530.jpg\" alt=\"the architecture of the solution and the approach to micro-applications and these components\" width=\"640\" height=\"331\" srcset=\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-42-1024x530.jpg 1024w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-42-300x155.jpg 300w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-42-768x398.jpg 768w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-42.jpg 1282w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>Source: <a href=\"https:\/\/micro-frontends.org\" target=\"_blank\" rel=\"noopener\">https:\/\/micro-frontends.org<\/a><\/p>\n<p>On the left, we can see the standard approach using a monolith as our application which includes a presentation layer, a data access layer, a logic layer, etc.<\/p>\n<p>This is a standard approach used in small applications with the coordination of one team called Monolith.<\/p>\n<p>In the middle part we see the front and back end layers.<\/p>\n<p>The project has been divided into two teams that communicate with each other, but their responsibility has been divided into the area they deal with.<\/p>\n<p>On the right, we have an approach to the project as microservices.<\/p>\n<p>We have a dedicated part of the frontend and shared access to dedicated services.<\/p>\n<p>Below in the diagram, we see the approach to the project as a micro frontend.<\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-4564 size-large\" src=\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-43-1024x530.jpg\" alt=\"end-to-end teams with micro frontends\" width=\"640\" height=\"331\" srcset=\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-43-1024x530.jpg 1024w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-43-300x155.jpg 300w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-43-768x398.jpg 768w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-43.jpg 1282w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>Source: <a href=\"https:\/\/micro-frontends.org\/\" target=\"_blank\" rel=\"noopener\">https:\/\/micro-frontends.org<\/a><\/p>\n<p>Each area is separated into a team that deals with a separate functionality, e.g. data searching or providing information from the newsletter.<\/p>\n<p>The approach is great when several teams are working on a project.<\/p>\n<p>Responsibility comes down to the preparation of the appropriate component \/ functionality that will be used in the project.<\/p>\n<p>An additional advantage is the creation by teams of independent separate micro-projects that have their own dependencies and can be implemented using other javascript frameworks, e.g. angular, react, etc.<\/p>\n<p>Source codes are separated into independent projects, which makes it easier to upgrade the version, update sources or replace old legacy components with new ones without interfering with the operation of our application.<\/p>\n<h3>So what are the advantages of using a micro frontend?<\/h3>\n<p>The most important ones that appear and are appreciated by the mass of programmers are:<\/p>\n<p>&#8211; easy-to-maintain code<\/p>\n<p>Using the micro frontend approach, the entire main application is divided into areas that are created by independent development teams that pursue a specific business goal.<\/p>\n<p>These separated areas are easier to manage, update and change.<\/p>\n<p>&#8211; independent placement<\/p>\n<p>The ability to implement a small set of functions without being dependent on other modules significantly reduces the scope and complexity of the implementation, even if another micro-application has damaged components or functions.<\/p>\n<p>&#8211; independent teams<\/p>\n<p>Independent teams working on a specific solution and focusing on a designated area for which they are responsible.<\/p>\n<p>Several teams from different time zones can work on the application, thanks to the fact that the application is separated into small projects, communication with teams is reduced to a minimum.<\/p>\n<p>&#8211; scalable team of programmers<\/p>\n<p>When the application receives new functionalities, we can flexibly implement new teams that will deal with individual functions and components without affecting the work of other teams.<\/p>\n<p>Choosing to implement a project as micro fronted also has several disadvantages such as<\/p>\n<p>&#8211; duplicate code<\/p>\n<p>When creating micro applications, teams work using their dependencies in projects, which often results in a large increase in the libraries used and their duplication.<\/p>\n<p>&#8211; state management<\/p>\n<p>Each micro-application manages its own state.<\/p>\n<p>In the traditional approach, the state is shared.<\/p>\n<p>If your team needs to use shared state, you should take care of techniques that will help you encode URLs.<\/p>\n<p>&#8211; communication between micro applications<\/p>\n<p>Micro frontends are based on the concept of independent applications.<\/p>\n<p>If we have a situation that our micro-application needs to transmit notifications to another micro-application should use the appropriate events, which may cause problems with synchronization.<\/p>\n<p>&#8211; UI\/UX consistency<\/p>\n<p>If several teams scattered around the world with their own timezone are working on a project, problematic situations may arise, such as making change decisions in our main application. One team will want to make contextual changes to the application, which must be approved by other teams.<\/p>\n<p>&#8211; Charging time<\/p>\n<p>This can become an issue where we hate the separate micro project approach.<\/p>\n<p>Each micro project has its own dependencies that the user must download for the application to work properly, and this extends the loading time of the entire application as an application<\/p>\n<p>Of course, there are more advantages and disadvantages, I wanted to highlight only the most important ones in my opinion.<\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-4562 size-large\" src=\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-45-1024x530.jpg\" alt=\"man working on computer\" width=\"640\" height=\"331\" srcset=\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-45-1024x530.jpg 1024w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-45-300x155.jpg 300w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-45-768x398.jpg 768w, https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-45.jpg 1282w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>Here is a list of the most famous frameworks that already exist and that will make it easier when we are working on applications using the micro frontend approach.<\/p>\n<ul>\n<li>Webpack Module Federation<\/li>\n<li>Single SPA<\/li>\n<li>SystemJS<\/li>\n<li>Piral<\/li>\n<li>Open Components \\ Web components<\/li>\n<li>Qiankun<\/li>\n<li>Luigi<\/li>\n<li>FrintJS<\/li>\n<li>PuzzleJS<\/li>\n<li>Icestark<\/li>\n<\/ul>\n<p>Sometimes, if we want to display another prepared page, e.g. youtube or an application prepared by us, we can use the html5 iframe element.<\/p>\n<p>The iframe element is used to embed external documents into web pages.<\/p>\n<p>Unfortunately, such a solution is simple and quick, it may not work when we want to display another application on our website, and the external application does not allow it, then we receive the used message.<\/p>\n<h2>3. Practical approach to micro frontends architecture. source code, examples<\/h2>\n<p>We will create a simple application that will use several popular frameworks. For example, we will use the sample single SPA framework <a href=\"https:\/\/single-spa.js.org\/\" target=\"_blank\" rel=\"noopener\">https:\/\/single-spa.js.org\/<\/a><\/p>\n<p>For a simple micro frontend application, I will use the Visual Studio Code development environment(you can always use such as Visual Studio Express or a paid solution from Jetbrains.<\/p>\n<p><strong>Please remember that I will not create all the files for this example, e.g. package.json or other.<\/strong><\/p>\n<p><strong>Let\u2019s start<\/strong><\/p>\n<p>I open visual studio code and then a terminal(shortcut ctrl + shift+ `)<\/p>\n<p>Create a new place for a project:<\/p>\n<pre>mkdir D:\\example\r\ncd D:\\example\r\ncode -r .<\/pre>\n<p><strong>Installing Regular Depedencies (depending on frameworks we use react, vue)<\/strong><\/p>\n<pre>npm install react react-dom single-spa single-spa-react single-spa-vue vue<\/pre>\n<p><strong>Installing Babel Dependencies<\/strong><\/p>\n<pre>npm install @babel\/core @babel\/plugin-proposal-object-rest-spread @babel\/plugin-syntax-dynamic-import<\/pre>\n<p><strong>Installing Webpack Dependencies<\/strong><\/p>\n<pre>npm install webpack webpack-cli webpack-dev-server clean-webpack-plugin css-loader html-loader style<\/pre>\n<p><strong>Create a folder where we will store projects of selected frameworks<\/strong><\/p>\n<pre>mkdir src\r\nmkdir src\/vue\r\nmkdir src\/react<\/pre>\n<p><strong>Create webpack config file<\/strong><\/p>\n<pre>code webpack.config.js\r\nconst path = require('path');\r\nconst webpack = require('webpack');\r\nconst { CleanWebpackPlugin } = require('clean-webpack-plugin');\r\nconst VueLoaderPlugin = require('vue-loader\/lib\/plugin')\r\n\r\nmodule.exports = {\r\nmode: 'development',\r\nentry: {\r\n'single-spa.config': '.\/single-spa.config.js',\r\n},\r\noutput: {\r\npublicPath: '\/dist\/',\r\nfilename: '[name].js',\r\npath: path.resolve(__dirname, 'dist'),\r\n},\r\nmodule: {\r\nrules: [\r\n{\r\ntest: \/\\.css$\/,\r\nuse: ['style-loader', 'css-loader']\r\n}, {\r\ntest: \/\\.js$\/,\r\nexclude: [path.resolve(__dirname, 'node_modules')],\r\nloader: 'babel-loader',\r\n},\r\n{\r\ntest: \/\\.vue$\/,\r\nloader: 'vue-loader'\r\n}\r\n],\r\n},\r\nnode: {\r\nfs: 'empty'\r\n},\r\nresolve: {\r\nalias: {\r\nvue: 'vue\/dist\/vue.js'\r\n},\r\nmodules: [path.resolve(__dirname, 'node_modules')],\r\n},\r\nplugins: [\r\nnew CleanWebpackPlugin(),\r\nnew VueLoaderPlugin()\r\n],\r\ndevtool: 'source-map',\r\nexternals: [],\r\ndevServer: {\r\nhistoryApiFallback: true\r\n}\r\n};<\/pre>\n<p><strong>Create babel configuration<\/strong><\/p>\n<p>code .babelrc<\/p>\n<pre>{\r\n\"presets\": [\r\n[\"@babel\/preset-env\", {\r\n\"targets\": {\r\n\"browsers\": [\"last 2 versions\"]\r\n}\r\n}],\r\n[\"@babel\/preset-react\"]\r\n],\r\n\"plugins\": [\r\n\"@babel\/plugin-syntax-dynamic-import\",\r\n\"@babel\/plugin-proposal-object-rest-spread\"\r\n]\r\n}<\/pre>\n<p><strong>Create single-spa configuration<\/strong><\/p>\n<p>Code single-spa.config.js<\/p>\n<pre>import { registerApplication, start } from 'single-spa'\r\n\r\nregisterApplication(\r\n'vue',\r\n() =&gt; import('.\/src\/vue\/vue.app.js'),\r\n() =&gt; location.pathname === \"\/react\" ? false : true\r\n);\r\n\r\nregisterApplication(\r\n'react',\r\n() =&gt; import('.\/src\/react\/main.app.js'),\r\n() =&gt; location.pathname === \"\/vue\" ? false : true\r\n);\r\n\r\nstart();<\/pre>\n<p><strong>Create project files into react and vue folders like<\/strong><\/p>\n<pre>cd \/src\/react<\/pre>\n<p>code main.app.js root.component.js<\/p>\n<p><strong>main.app.js<\/strong><\/p>\n<pre>import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport singleSpaReact from 'single-spa-react';\r\nimport Home from '.\/root.component.js';\r\n\r\nfunction getDocument() {\r\nreturn document.getElementById(\"react\")\r\n}\r\n\r\nconst reactLifecycles = singleSpaReact({\r\nReact,\r\nReactDOM,\r\nrootComponent: Home,\r\ngetDocument,\r\n})\r\n\r\nexport const bootstrap = [\r\nreactLifecycles.bootstrap,\r\n];\r\n\r\nexport const mount = [\r\nreactLifecycles.mount,\r\n];\r\n\r\nexport const unmount = [\r\nreactLifecycles.unmount,\r\n];<\/pre>\n<p><strong>root.component.js<\/strong><\/p>\n<pre>import React from \"react\"\r\nconst App = () =&gt; &lt;h1&gt;Hello World from react &lt;\/h1&gt;\r\nexport default App<\/pre>\n<p><strong>Similarly, we generate a new project for vue<\/strong><\/p>\n<p><strong>Create Index.html<\/strong><\/p>\n<pre>&lt;html&gt;\r\n&lt;head&gt;&lt;\/head&gt;\r\n&lt;body&gt;\r\n&lt;div id=\"react\"&gt;&lt;\/div&gt;\r\n&lt;div id=\"vue\"&gt;&lt;\/div&gt;\r\n&lt;script src=\"\/dist\/single-spa.config.js\"&gt;&lt;\/script&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;<\/pre>\n<p><strong>Run the start script ang go to the browser<\/strong><\/p>\n<pre>npm start<\/pre>\n<p><img loading=\"lazy\" class=\"alignnone\" src=\"https:\/\/lh5.googleusercontent.com\/Dt2j_WPVRTGAo6NGWnzcoelYFk6E1JstfCMyUkdic6jKEcVZCNjCQKtnlpw01Mja8qNPQCTDGTlPtzd76nCaAwLsvtukk3ikWIjhAur2FFRIXasrWZ8uRDdQwYTzZgU7Nzf3zqsC\" alt=\"hello world from react\" width=\"334\" height=\"252\" \/><\/p>\n<p>This is the simplest possible example.<\/p>\n<p>In addition to our applications, we can implement appropriate CSS styles to make our application look appropriate.<\/p>\n<p>Another example to create micro frontend application is use single-spa CLI.<\/p>\n<p><a href=\"https:\/\/single-spa.js.org\/docs\/getting-started-overview\" target=\"_blank\" rel=\"noopener\">https:\/\/single-spa.js.org\/docs\/getting-started-overview<\/a><\/p>\n<p>In terminal<\/p>\n<pre>npx create-single-spa<\/pre>\n<p>The installer will guide you through installing add-ons and dependencies by asking step-by-step questions.<\/p>\n<p><img src=\"https:\/\/lh6.googleusercontent.com\/f5ZSJ0KrEqkDDR19UOEqTq3e8P3RdVBq_pzDS4v9l14T2-P8HgUdU_sL1gt_WAqVOgNV9mFpdS6zLEFDdo7IlLPOmQBLORAl2W7W0U_UOl1v57OGcYqPn9ltQUtX99CglJe8Ckm-\" \/><\/p>\n<h2>4. Summary<\/h2>\n<p>The given entry is only a small fragment introducing you to design an application with the use of a micro frontends.<\/p>\n<p>In conclusion, I want to say that we have access to many great studies on how to build modern web applications with using micro frontend approach. Remember that monolith architecture is not a bad choice.<\/p>\n<p>It all depends on the specifications of the project and the team working on it, you should facilitate and simplify solutions as much as possible.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. Introduction, a few words about micro frontend architecture, solution architecture Micro frontends are small web applications that are broken down into components or functions that work together to provide a larger application. If your project is small enough and supported by one team, the better solution will be to choose a monolithic SPA architecture [&hellip;]<\/p>\n","protected":false},"author":25,"featured_media":4563,"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>Introduction To Micro Frontend. Part I - 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\/introduction-to-micro-frontend-part-i\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introduction To Micro Frontend. Part I - Evertop\" \/>\n<meta property=\"og:description\" content=\"1. Introduction, a few words about micro frontend architecture, solution architecture Micro frontends are small web applications that are broken down into components or functions that work together to provide a larger application. If your project is small enough and supported by one team, the better solution will be to choose a monolithic SPA architecture [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/\" \/>\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-05-12T09:09:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-07-14T09:54:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-44.jpg\" \/>\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=\"8 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\/introduction-to-micro-frontend-part-i\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-44.jpg\",\"contentUrl\":\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-44.jpg\",\"width\":1282,\"height\":664,\"caption\":\"micro frontend\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/#webpage\",\"url\":\"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/\",\"name\":\"Introduction To Micro Frontend. Part I - Evertop\",\"isPartOf\":{\"@id\":\"https:\/\/www.evertop.pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/#primaryimage\"},\"datePublished\":\"2021-05-12T09:09:59+00:00\",\"dateModified\":\"2021-07-14T09:54:54+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\\u0142\\u00f3wna\",\"item\":\"https:\/\/www.evertop.pl\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introduction To Micro Frontend. Part I\"}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/#webpage\"},\"author\":{\"@id\":\"https:\/\/www.evertop.pl\/#\/schema\/person\/05241f55b0571cacd73a963a945799ca\"},\"headline\":\"Introduction To Micro Frontend. Part I\",\"datePublished\":\"2021-05-12T09:09:59+00:00\",\"dateModified\":\"2021-07-14T09:54:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/#webpage\"},\"wordCount\":1368,\"publisher\":{\"@id\":\"https:\/\/www.evertop.pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-44.jpg\",\"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":"Introduction To Micro Frontend. Part I - 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\/introduction-to-micro-frontend-part-i\/","og_locale":"en_US","og_type":"article","og_title":"Introduction To Micro Frontend. Part I - Evertop","og_description":"1. Introduction, a few words about micro frontend architecture, solution architecture Micro frontends are small web applications that are broken down into components or functions that work together to provide a larger application. If your project is small enough and supported by one team, the better solution will be to choose a monolithic SPA architecture [&hellip;]","og_url":"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/","og_site_name":"Evertop","article_publisher":"https:\/\/www.facebook.com\/EvertopPoland\/","article_published_time":"2021-05-12T09:09:59+00:00","article_modified_time":"2021-07-14T09:54:54+00:00","og_image":[{"width":1282,"height":664,"url":"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-44.jpg","path":"\/home\/evertop\/web-evertop\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-44.jpg","size":"full","id":4563,"alt":"micro frontend","pixels":851248,"type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Written by":"Rafa\u0142 Czarkowski","Est. reading time":"8 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\/introduction-to-micro-frontend-part-i\/#primaryimage","inLanguage":"en-US","url":"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-44.jpg","contentUrl":"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-44.jpg","width":1282,"height":664,"caption":"micro frontend"},{"@type":"WebPage","@id":"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/#webpage","url":"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/","name":"Introduction To Micro Frontend. Part I - Evertop","isPartOf":{"@id":"https:\/\/www.evertop.pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/#primaryimage"},"datePublished":"2021-05-12T09:09:59+00:00","dateModified":"2021-07-14T09:54:54+00:00","breadcrumb":{"@id":"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/www.evertop.pl\/en\/"},{"@type":"ListItem","position":2,"name":"Introduction To Micro Frontend. Part I"}]},{"@type":"Article","@id":"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/#article","isPartOf":{"@id":"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/#webpage"},"author":{"@id":"https:\/\/www.evertop.pl\/#\/schema\/person\/05241f55b0571cacd73a963a945799ca"},"headline":"Introduction To Micro Frontend. Part I","datePublished":"2021-05-12T09:09:59+00:00","dateModified":"2021-07-14T09:54:54+00:00","mainEntityOfPage":{"@id":"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/#webpage"},"wordCount":1368,"publisher":{"@id":"https:\/\/www.evertop.pl\/#organization"},"image":{"@id":"https:\/\/www.evertop.pl\/en\/introduction-to-micro-frontend-part-i\/#primaryimage"},"thumbnailUrl":"https:\/\/www.evertop.pl\/wp-content\/uploads\/2021\/05\/grafiki_blog_4-44.jpg","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\/4534"}],"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=4534"}],"version-history":[{"count":16,"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/posts\/4534\/revisions"}],"predecessor-version":[{"id":4975,"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/posts\/4534\/revisions\/4975"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/media\/4563"}],"wp:attachment":[{"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/media?parent=4534"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/categories?post=4534"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.evertop.pl\/en\/wp-json\/wp\/v2\/tags?post=4534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}