{"id":6208,"date":"2022-06-06T17:27:11","date_gmt":"2022-06-06T15:27:11","guid":{"rendered":"https:\/\/www.angulararchitects.io\/?p=6208"},"modified":"2024-01-19T15:39:30","modified_gmt":"2024-01-19T14:39:30","slug":"whats-new-in-angular-architects-module-federation-14-3","status":"publish","type":"post","link":"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/","title":{"rendered":"What&#8217;s New in our Module Federation Plugin 14.3?"},"content":{"rendered":"<div class=\"wp-post-series-box series-module-federation wp-post-series-box--expandable\">\n\t\t\t<input id=\"collapsible-series-module-federation69f4a0fba376b\" class=\"wp-post-series-box__toggle_checkbox\" type=\"checkbox\">\n\t\n\t<label\n\t\tclass=\"wp-post-series-box__label\"\n\t\t\t\t\tfor=\"collapsible-series-module-federation69f4a0fba376b\"\n\t\t\ttabindex=\"0\"\n\t\t\t\t>\n\t\t<p class=\"wp-post-series-box__name wp-post-series-name\">\n\t\t\tThis is post 10 of 10 in the series <em>&ldquo;Module Federation&rdquo;<\/em>\t\t<\/p>\n\t\t\t<\/label>\n\n\t\t\t<div class=\"wp-post-series-box__posts\">\n\t\t\t<ol>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/the-microfrontend-revolution-module-federation-in-webpack-5\/\">The Microfrontend Revolution: Module Federation in Webpack 5<\/a><\/li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/the-microfrontend-revolution-part-2-module-federation-with-angular\/\">The Microfrontend Revolution: Module Federation with Angular<\/a><\/li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/dynamic-module-federation-with-angular\/\">Dynamic Module Federation with Angular<\/a><\/li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/dynamic-module-federation-with-angular-2\/\">Building A Plugin-based Workflow Designer With Angular and Module Federation<\/a><\/li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/getting-out-of-version-mismatch-hell-with-module-federation\/\">Getting Out of Version-Mismatch-Hell with Module Federation<\/a><\/li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/using-module-federation-with-monorepos-and-angular\/\">Using Module Federation with (Nx) Monorepos and Angular<\/a><\/li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/pitfalls-with-module-federation-and-angular\/\">Pitfalls with Module Federation and Angular<\/a><\/li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/multi-framework-and-version-micro-frontends-with-module-federation-your-4-steps-guide\/\">Multi-Framework and -Version Micro Frontends with Module Federation: Your 4 Steps Guide<\/a><\/li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/module-federation-with-angulars-standalone-components\/\">Module Federation with Angular&#8217;s Standalone Components<\/a><\/li>\n\t\t\t\t\t\t\t\t\t<li><span class=\"wp-post-series-box__current\">What&#8217;s New in our Module Federation Plugin 14.3?<\/span><\/li>\n\t\t\t\t\t\t\t<\/ol>\n\t\t<\/div>\n\t<\/div>\n<p>With version 14.3 of our CLI plugin <a href=\"https:\/\/www.npmjs.com\/package\/@angular-architects\/module-federation\">@angular-architects\/module-federation<\/a>, we introduced support for Angular 14 and a new and more streamlined way of configuring Module Federation. Also, we add support for eager and pinned dependencies. This article shows the highlights. <a href=\"https:\/\/github.com\/manfredsteyer\/module-federation-plugin-example\">\ud83d\udcc2 Source Code<\/a><\/p>\n<h2>Updating to 14.3<\/h2>\n<p>This library supports <code>ng update<\/code>:<\/p>\n<pre><code class=\"language-bash\">ng update @angular-architects\/module-federation<\/code><\/pre>\n<p>If you update by hand (e. g. via <code>npm install<\/code>), make sure you also install a respective version of <code>ngx-build-plus<\/code> (version 14 for Angular 14, version 13 for Angular 13, etc.)<\/p>\n<h2>Streamlined Configuration<\/h2>\n<p>While we are using customer-specific helper methods for quite a time, version 14.3 comes with a new official one called <code>withModuleFederationPlugin<\/code>. It just takes the configuration data people normally adjust. <strong>The old way still works<\/strong>, but you might want to move over to the new more concise approach using the new <code>withModuleFederationPlugin<\/code> helper function. The updated <code>init<\/code> schematic and <code>ng add<\/code> use this new way automatically if you set the <code>--type<\/code> switch to <code>host<\/code>, <code>dynamic-host<\/code>, or <code>remote<\/code>:<\/p>\n<pre><code class=\"language-bash\">ng add @angular-architects\/module-federation --project mfe1 --port 4201 --type remote<\/code><\/pre>\n<p>If you go with Nx, use npm install and the init schematic instead:<\/p>\n<pre><code class=\"language-bash\"> npm i @angular-architects\/module-federation -D \n ng g @angular-architects\/module-federation:init --project mfe1 --port 4201 --type remote<\/code><\/pre>\n<p>This is an example for configuring a remote with the new streamlined form:<\/p>\n<pre><code class=\"language-javascript\"> const { shareAll, withModuleFederationPlugin } = require(&#039;@angular-architects\/module-federation\/webpack&#039;);\n\n \/\/ Version 14\n module.exports = withModuleFederationPlugin({\n\n   name: &#039;mfe1&#039;,\n\n   exposes: {\n     &#039;.\/Module&#039;: &#039;.\/projects\/mfe1\/src\/app\/flights\/flights.module.ts&#039;,\n   },\n\n   shared: {\n     ...shareAll({ singleton: true, strictVersion: true, requiredVersion: &#039;auto&#039; }),\n   },\n\n });<\/code><\/pre>\n<p>In version 13, the same looked like this:<\/p>\n<pre><code class=\"language-javascript\"> \/\/ Version 13\n const ModuleFederationPlugin = require(&quot;webpack\/lib\/container\/ModuleFederationPlugin&quot;);\n const mf = require(&quot;@angular-architects\/module-federation\/webpack&quot;);\n const path = require(&quot;path&quot;);\n\n const share = mf.share;\n\n const sharedMappings = new mf.SharedMappings();\n sharedMappings.register(\n   path.join(__dirname, &#039;..\/..\/tsconfig.json&#039;),\n   [&#039;auth-lib&#039;]  \n );\n\n module.exports = {\n   output: {\n     uniqueName: &quot;mfe1&quot;,\n     publicPath: &quot;auto&quot;\n   },\n   optimization: {\n     runtimeChunk: false\n   },  \n   resolve: {\n     alias: {\n       ...sharedMappings.getAliases(),\n     }\n   },\n   experiments: {\n     outputModule: true\n   },  \n   plugins: [\n     new ModuleFederationPlugin({\n         library: { type: &quot;module&quot; },\n\n         \/\/ For remotes (please adjust)\n         name: &quot;mfe1&quot;,\n         filename: &quot;remoteEntry.js&quot;,  \/\/ 2-3K w\/ Meta Data\n         exposes: {\n             &#039;.\/Module&#039;: &#039;.\/projects\/mfe1\/src\/app\/flights\/flights.module.ts&#039;,\n         },        \n         shared: share({\n           &quot;@angular\/core&quot;: { singleton: true, strictVersion: true, requiredVersion: &#039;auto&#039; },\n           &quot;@angular\/common&quot;: { singleton: true, strictVersion: true, requiredVersion: &#039;auto&#039; },\n           &quot;@angular\/router&quot;: { singleton: true, strictVersion: true, requiredVersion: &#039;auto&#039; },\n           &quot;@angular\/common\/http&quot;: { singleton: true, strictVersion: true, requiredVersion: &#039;auto&#039; }, \n\n           \/\/ Uncomment for sharing lib of an Angular CLI or Nx workspace\n           ...sharedMappings.getDescriptors()\n         })\n\n     }),\n     \/\/ Uncomment for sharing lib of an Angular CLI or Nx workspace\n     sharedMappings.getPlugin(),\n   ],\n };<\/code><\/pre>\n<p>The passed configuration is a <strong>superset<\/strong> of the settings provided by webpack's <code>ModuleFederationPlugin<\/code>. Also, it uses some <strong>smart defaults<\/strong>. Hence, consumers can build on their existing knowledge. These defaults are:<\/p>\n<ul>\n<li><code>library: { type: &quot;module&quot; }<\/code>: This is what you need for Angular &gt;= 13 as CLI 13 switched over to emitting &quot;real&quot; EcmaScript modules instead of just ordinary JavaScript bundles.<\/li>\n<li><code>filename: &#039;remoteEntry.js&#039;<\/code>: This makes Module Federation emit a file <code>remoteEntry.js<\/code> with the remote entry point.<\/li>\n<li><code>share: shareAll(...)<\/code>: This shares all packages found in the dependencies section of your <code>package.json<\/code> by default (see remarks below).<\/li>\n<li><code>sharedMappings<\/code>: If you skip the <code>sharedMappings<\/code> array, all local libs (aka mono repo-internal libs or mapped paths) are shared. Otherwise, only the mentioned libs are shared. This setting replaces the <code>SharedMappings<\/code> class used in the classic configuration (actually, it's now used under the hoods).<\/li>\n<\/ul>\n<h3>Remarks on shareAll<\/h3>\n<p>As mentioned above, <code>withModuleFederationPlugin<\/code> uses <code>shareAll<\/code> by default. This allows for a quick first setup that &quot;just works&quot;. However, it might lead to too much shared bundles. As shared dependencies cannot be tree shaken and by default end up in separate bundles that need to be loaded, you might want to optimize this behavior by switching over from <code>shareAll<\/code> to the <code>share<\/code> helper:<\/p>\n<pre><code class=\"language-javascript\"> \/\/ Import share instead of shareAll:\n const { share, withModuleFederationPlugin } = require(&#039;@angular-architects\/module-federation\/webpack&#039;);\n\n module.exports = withModuleFederationPlugin({\n\n     \/\/ Explicitly share packages:\n     shared: share({\n         &quot;@angular\/core&quot;: { singleton: true, strictVersion: true, requiredVersion: &#039;auto&#039; }, \n         &quot;@angular\/common&quot;: { singleton: true, strictVersion: true, requiredVersion: &#039;auto&#039; }, \n         &quot;@angular\/common\/http&quot;: { singleton: true, strictVersion: true, requiredVersion: &#039;auto&#039; },                     \n         &quot;@angular\/router&quot;: { singleton: true, strictVersion: true, requiredVersion: &#039;auto&#039; },\n     }),\n\n     \/\/ Explicitly share mono-repo libs:\n     sharedMappings: [&#039;auth-lib&#039;],\n\n });<\/code><\/pre>\n<h2>Eager and Pinned Dependencies<\/h2>\n<blockquote>\n<p>Big thanks to <a href=\"https:\/\/twitter.com\/MikeZks\">Michael Egger-Zikes<\/a>, who came up with these solutions.<\/p>\n<\/blockquote>\n<p>Module Federation allows to directly bundle shared dependencies into your app's bundles. Hence, you don't need to load an additional bundle per shared dependency. This can be interesting to improve an application's startup performance, when there are lots of shared dependencies. One possible usage for improving the startup times is to set <code>eager<\/code> to <code>true<\/code> <strong>just<\/strong> for the host. The remotes loaded later can reuse these eager dependencies although they've been shipped via the host's bundle (e. g. its <code>main.js<\/code>). This works best, if the host always has the highest compatible versions of the shared dependencies. Also, in this case, you don't need to load the remote entry points upfront. While the <code>eager<\/code> flag is an out of the box feature provided by module federation since its very first days, we need to adjust the webpack configuration generated by the Angular CLI a bit to avoid code duplication in the generated bundles. The new <code>withModuleFederationPlugin<\/code> helper is the basis for the new streamlined configuration, does this by default. The config just needs to set eager to <code>true<\/code>.<\/p>\n<pre><code class=\"language-javascript\"> module.exports = withModuleFederationPlugin({\n\n   shared: {\n     ...shareAll({ singleton: true, eager: true, pinned: true, strictVersion: true, requiredVersion: &#039;auto&#039; }),\n   },\n\n });<\/code><\/pre>\n<p>As shown in the last example, we also added another property: <code>pinned<\/code>. This makes sure, the shared dependency is put into the application's (e. g. the host's) bundle, even though it's not used there. This allows to preload dependencies that are needed later but subsequently loaded micro frontends via one bundle.<\/p>\n<h2>Dynamic Configuration and &quot;Registry&quot; Services<\/h2>\n<p>This feature was inspired by <a href=\"https:\/\/nx.dev\/\">Nx<\/a> we use a lot together with Module Federation. It's about helper functions for loading a configuration file with the Micro Frontend's urls and remote entry points:<\/p>\n<pre><code class=\"language-json\"> {\n     &quot;mfe1&quot;: &quot;http:\/\/localhost:4201\/remoteEntry.js&quot;\n }<\/code><\/pre>\n<p>We go with the term introduced by Nx and also call this the <em>Module Federation Manifest<\/em>. A new helper function called <code>loadManifest<\/code> allows to load the manifest:<\/p>\n<pre><code class=\"language-typescript\"> import { loadManifest } from &#039;@angular-architects\/module-federation&#039;;\n\n loadManifest(&#039;assets\/mf.manifest.json&#039;)\n     .catch(err =&gt; console.error(&#039;Error loading remote entries&#039;, err))\n     .then(() =&gt; import(&#039;.\/bootstrap&#039;))\n     .catch(err =&gt; console.error(err));<\/code><\/pre>\n<p>By default, <code>loadManifest<\/code> also loads all the remote entry points. However, there is a second optional parameter called <code>skipRemoteEntries<\/code> you can set to <code>true<\/code> to avoid this automatism:<\/p>\n<pre><code class=\"language-typescript\">loadManifest(&#039;assets\/mf.manifest.json&#039;, true)<\/code><\/pre>\n<p>Loading a remote configured by the manifest looks like this:<\/p>\n<pre><code class=\"language-typescript\"> {\n     path: &#039;flights&#039;,\n     loadChildren: () =&gt;\n         loadRemoteModule({\n             type: &#039;manifest&#039;,\n             remoteName: &#039;mfe1&#039;,\n             exposedModule: &#039;.\/Module&#039;\n         })\n         .then(m =&gt; m.FlightsModule)\n },<\/code><\/pre>\n<blockquote>\n<p>The <code>ng add<\/code> command discussed initially also provides an option <code>--type dynamic-host<\/code>. This makes <code>ng add<\/code> to generate the <code>mf.manifest.json<\/code> and the call to <code>loadManifest<\/code> in the <code>main.ts<\/code>.<\/p>\n<\/blockquote>\n<h2>Automatically Adding Secondary Entry Points<\/h2>\n<p>Since version 14.3, our share helpers (<code>share<\/code>, <code>shareAll<\/code>) add secondary entry points by default. Hence, if <code>@angular\/common<\/code> is shared, <code>@angular\/common\/http<\/code> is shared too. While this feature was an opt-in in previous versions, it's now on by default. If you want to turn it off or fine-tune it, you can use the <code>includeSecondaries<\/code> flag in our <code>share<\/code> helpers. For instance, the following setting turns this feature off:<\/p>\n<pre><code class=\"language-typescript\"> shared: share({\n     &quot;@angular\/common&quot;: { \n         singleton: true, \n         strictVersion: true,\n         requiredVersion: &#039;auto&#039;,\n         includeSecondaries: false\n     },\n     [...]\n })<\/code><\/pre>\n<p>Another option is to activate it using a list with libraries that are skipped:<\/p>\n<pre><code class=\"language-typescript\"> shared: share({\n     &quot;@angular\/common&quot;: { \n         singleton: true, \n         strictVersion: true,\n         requiredVersion: &#039;auto&#039;,\n         includeSecondaries: {\n             skip: [&#039;@angular\/common\/http\/testing&#039;]\n         }\n     },\n     [...]\n })<\/code><\/pre>\n<p>While skipping libraries reduce the amount of generated bundles, it does not necessarily increase the overhead at runtime as Module Federation only loads the needed dependencies.<\/p>\n<h2>Secondary Entry Points and the Angular Package Format 14<\/h2>\n<p>Before Angular 14, we needed to search the <code>node_modules<\/code> folders of the shared dependencies for secondary entry points. Fortunately, the Angular Package Format 14 defines that each Angular library needs to declare its secondary entry points in its <code>package.json<\/code>. Also, <code>ng-packagr<\/code> used by the CLI when building a library has been adjusted to this. Since version 14.3, we use this meta data to purposefully get information about secondaries. If this meta data is not there, we are still probing the <code>node_modules<\/code> folder.<\/p>\n<h2>run:all With Parameters<\/h2>\n<p>The last one is a quite small feature. The <code>init<\/code> and <code>ng-add<\/code> schematics add an npm script <code>run:all<\/code> since several versions. This script starts all apps in the repository. Now, you can specify which apps to start by adding their names as command line arguments. If no app is specified that way, all applications are still started. However, there is one exception: End-2-End test projects are always skipped.<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/uploads\/2022\/06\/run-all.png\" alt=\"run:all\" \/>## What's next? More on Architecture!<\/p>\n<p>This article has shown several new features of the Module Federation plugin. However, when dealing with Module Federation, Micro Frontenends, and huge architectures, several advanced questions come in mind, e. g.:<\/p>\n<ul>\n<li>According to which criteria can we subdivide a huge application into sub-domains?<\/li>\n<li>How can we make sure, the solution is maintainable for years or even decades?<\/li>\n<li>Which options from Micro Frontends are provided by Module Federation?<\/li>\n<\/ul>\n<p>Our free eBook (about 120 pages) covers all these questions and more: <a href=\"https:\/\/www.angulararchitects.io\/book\"><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2020\/12\/cover-small.png\" alt=\"free\" \/><\/a>Feel free to <a href=\"https:\/\/www.angulararchitects.io\/en\/book\">download it here<\/a> now!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>v14.3 comes with support for Angular 14 and a new and more streamlined configuration. Also, we add support for eager and pinned dependencies.<\/p>\n","protected":false},"author":9,"featured_media":6211,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_price":"","_stock":"","_tribe_ticket_header":"","_tribe_default_ticket_provider":"","_ticket_start_date":"","_ticket_end_date":"","_tribe_ticket_show_description":"","_tribe_ticket_show_not_going":false,"_tribe_ticket_use_global_stock":"","_tribe_ticket_global_stock_level":"","_global_stock_mode":"","_global_stock_cap":"","_tribe_rsvp_for_event":"","_tribe_ticket_going_count":"","_tribe_ticket_not_going_count":"","_tribe_tickets_list":"[]","_tribe_ticket_has_attendee_info_fields":false,"footnotes":""},"categories":[18],"tags":[],"class_list":["post-6208","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","post_series-module-federation"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>What&#039;s New in our Module Federation Plugin 14.3? - ANGULARarchitects<\/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.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What&#039;s New in our Module Federation Plugin 14.3? - ANGULARarchitects\" \/>\n<meta property=\"og:description\" content=\"v14.3 comes with support for Angular 14 and a new and more streamlined configuration. Also, we add support for eager and pinned dependencies.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/\" \/>\n<meta property=\"og:site_name\" content=\"ANGULARarchitects\" \/>\n<meta property=\"article:published_time\" content=\"2022-06-06T15:27:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-19T14:39:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2022\/06\/social.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"418\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Manfred Steyer, GDE\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2022\/06\/social.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@daniel\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Manfred Steyer, GDE\" \/>\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\":\"Article\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/\"},\"author\":{\"name\":\"Manfred Steyer, GDE\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/15628efa7af4475ffaaeeb26c5112951\"},\"headline\":\"What&#8217;s New in our Module Federation Plugin 14.3?\",\"datePublished\":\"2022-06-06T15:27:11+00:00\",\"dateModified\":\"2024-01-19T14:39:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/\"},\"wordCount\":1083,\"publisher\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2022\/06\/bg.jpg\",\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/\",\"name\":\"What's New in our Module Federation Plugin 14.3? - ANGULARarchitects\",\"isPartOf\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2022\/06\/bg.jpg\",\"datePublished\":\"2022-06-06T15:27:11+00:00\",\"dateModified\":\"2024-01-19T14:39:30+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/#primaryimage\",\"url\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2022\/06\/bg.jpg\",\"contentUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2022\/06\/bg.jpg\",\"width\":1700,\"height\":1134},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.angulararchitects.io\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What&#8217;s New in our Module Federation Plugin 14.3?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#website\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/\",\"name\":\"ANGULARarchitects\",\"description\":\"AngularArchitects.io\",\"publisher\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.angulararchitects.io\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\",\"name\":\"ANGULARarchitects\",\"alternateName\":\"SOFTWAREarchitects\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg\",\"contentUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg\",\"width\":644,\"height\":216,\"caption\":\"ANGULARarchitects\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/github.com\/angular-architects\",\"https:\/\/www.linkedin.com\/company\/angular-architects\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/15628efa7af4475ffaaeeb26c5112951\",\"name\":\"Manfred Steyer, GDE\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a0b59539674d8b71ea1c1f4764b11244b5f499203f1d11b40f37d8f3f90be033?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a0b59539674d8b71ea1c1f4764b11244b5f499203f1d11b40f37d8f3f90be033?s=96&d=mm&r=g\",\"caption\":\"Manfred Steyer, GDE\"},\"sameAs\":[\"https:\/\/x.com\/daniel\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"What's New in our Module Federation Plugin 14.3? - ANGULARarchitects","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.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/","og_locale":"en_US","og_type":"article","og_title":"What's New in our Module Federation Plugin 14.3? - ANGULARarchitects","og_description":"v14.3 comes with support for Angular 14 and a new and more streamlined configuration. Also, we add support for eager and pinned dependencies.","og_url":"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/","og_site_name":"ANGULARarchitects","article_published_time":"2022-06-06T15:27:11+00:00","article_modified_time":"2024-01-19T14:39:30+00:00","og_image":[{"width":800,"height":418,"url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2022\/06\/social.jpg","type":"image\/jpeg"}],"author":"Manfred Steyer, GDE","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2022\/06\/social.jpg","twitter_creator":"@daniel","twitter_misc":{"Written by":"Manfred Steyer, GDE","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/#article","isPartOf":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/"},"author":{"name":"Manfred Steyer, GDE","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/15628efa7af4475ffaaeeb26c5112951"},"headline":"What&#8217;s New in our Module Federation Plugin 14.3?","datePublished":"2022-06-06T15:27:11+00:00","dateModified":"2024-01-19T14:39:30+00:00","mainEntityOfPage":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/"},"wordCount":1083,"publisher":{"@id":"https:\/\/www.angulararchitects.io\/en\/#organization"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/#primaryimage"},"thumbnailUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2022\/06\/bg.jpg","inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/","url":"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/","name":"What's New in our Module Federation Plugin 14.3? - ANGULARarchitects","isPartOf":{"@id":"https:\/\/www.angulararchitects.io\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/#primaryimage"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/#primaryimage"},"thumbnailUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2022\/06\/bg.jpg","datePublished":"2022-06-06T15:27:11+00:00","dateModified":"2024-01-19T14:39:30+00:00","breadcrumb":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/#primaryimage","url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2022\/06\/bg.jpg","contentUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2022\/06\/bg.jpg","width":1700,"height":1134},{"@type":"BreadcrumbList","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/whats-new-in-angular-architects-module-federation-14-3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.angulararchitects.io\/en\/"},{"@type":"ListItem","position":2,"name":"What&#8217;s New in our Module Federation Plugin 14.3?"}]},{"@type":"WebSite","@id":"https:\/\/www.angulararchitects.io\/en\/#website","url":"https:\/\/www.angulararchitects.io\/en\/","name":"ANGULARarchitects","description":"AngularArchitects.io","publisher":{"@id":"https:\/\/www.angulararchitects.io\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.angulararchitects.io\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.angulararchitects.io\/en\/#organization","name":"ANGULARarchitects","alternateName":"SOFTWAREarchitects","url":"https:\/\/www.angulararchitects.io\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/","url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg","contentUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg","width":644,"height":216,"caption":"ANGULARarchitects"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/github.com\/angular-architects","https:\/\/www.linkedin.com\/company\/angular-architects\/"]},{"@type":"Person","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/15628efa7af4475ffaaeeb26c5112951","name":"Manfred Steyer, GDE","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/a0b59539674d8b71ea1c1f4764b11244b5f499203f1d11b40f37d8f3f90be033?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a0b59539674d8b71ea1c1f4764b11244b5f499203f1d11b40f37d8f3f90be033?s=96&d=mm&r=g","caption":"Manfred Steyer, GDE"},"sameAs":["https:\/\/x.com\/daniel"]}]}},"_links":{"self":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts\/6208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/comments?post=6208"}],"version-history":[{"count":2,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts\/6208\/revisions"}],"predecessor-version":[{"id":24276,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts\/6208\/revisions\/24276"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/media\/6211"}],"wp:attachment":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/media?parent=6208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/categories?post=6208"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/tags?post=6208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}