{"id":707,"date":"2023-12-30T23:31:50","date_gmt":"2023-12-30T16:31:50","guid":{"rendered":"https:\/\/thoaicoder.com\/?p=707"},"modified":"2024-01-07T00:33:00","modified_gmt":"2024-01-06T17:33:00","slug":"managing-multiple-angular-application-with-nx-monorepo","status":"publish","type":"post","link":"https:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/","title":{"rendered":"Managing multiple Angular application with Nx Monorepo"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">1. Introduction<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Managing multiple Angular applications and libraries across disparate repositories in modern software development environments leads to significant code consistency, reusability, and maintenance challenges. The absence of a centralized structure results in duplicated efforts, divergent codebases, inconsistent tooling, and hindered team collaboration. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s imagine we build an e-commerce platform that contains<strong> two Angular web apps <\/strong>used by internal staff and customers. The staff app and the customer app contain many similar UI components such as the product info below, which is used on the staff app &#8211; product management screen and the customer app &#8211; product detail screen. We need an approach to reuse the product info screen and the other common UI components.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"416\" height=\"723\" src=\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2024\/01\/image-3.png\" alt=\"\" class=\"wp-image-727\" srcset=\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2024\/01\/image-3.png 416w, https:\/\/thoaicoder.com\/wp-content\/uploads\/2024\/01\/image-3-173x300.png 173w\" sizes=\"auto, (max-width: 416px) 100vw, 416px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Consequently, there arises a critical need for an <strong>monorepo solution<\/strong> that consolidates diverse projects, fosters code sharing, enforces uniform development practices, and simplifies maintenance, thereby addressing the complexities associated with fragmented repositories and promoting streamlined, scalable, and collaborative software development processes.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"535\" src=\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2023\/12\/645971c5aebb03235f2642d6_613b6d8739fd739fcffd11a4_repo-main201-1024x535.png\" alt=\"\" class=\"wp-image-710\" srcset=\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2023\/12\/645971c5aebb03235f2642d6_613b6d8739fd739fcffd11a4_repo-main201-1024x535.png 1024w, https:\/\/thoaicoder.com\/wp-content\/uploads\/2023\/12\/645971c5aebb03235f2642d6_613b6d8739fd739fcffd11a4_repo-main201-300x157.png 300w, https:\/\/thoaicoder.com\/wp-content\/uploads\/2023\/12\/645971c5aebb03235f2642d6_613b6d8739fd739fcffd11a4_repo-main201-768x401.png 768w, https:\/\/thoaicoder.com\/wp-content\/uploads\/2023\/12\/645971c5aebb03235f2642d6_613b6d8739fd739fcffd11a4_repo-main201-1536x803.png 1536w, https:\/\/thoaicoder.com\/wp-content\/uploads\/2023\/12\/645971c5aebb03235f2642d6_613b6d8739fd739fcffd11a4_repo-main201-2048x1070.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Popular tools like Nx and Angular CLI support managing monorepo, providing commands and tooling to create, build, test, and manage multiple Angular applications and libraries within a single codebase. We will use Nx to create a sample monorepo project on this topic.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">2. Nx<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/nx.dev\/\">NX <\/a>is a powerful set of extensible dev tools built around monorepos, primarily used with frameworks like Angular, React, and Node.js. It&#8217;s developed by Nrwl (pronounced &#8220;narl&#8221;), which focuses on simplifying enterprise development workflows.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Key components and features of NX include:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Monorepo Structure:<\/strong> NX helps structure projects in a monorepository, allowing multiple applications and libraries to coexist within the same codebase. This promotes code sharing, easy dependency management, and centralized configuration.<\/li>\n\n\n\n<li><strong>Powerful CLI:<\/strong> It provides a command-line interface (CLI) that extends the capabilities of Angular CLI or other framework CLIs. This includes commands for generating code, running tests, serving applications, and managing the monorepo structure.<\/li>\n\n\n\n<li><strong>Code Generation:<\/strong> NX offers advanced code generation tools that assist in creating components, modules, services, and more. It integrates with the framework&#8217;s CLI to enhance and automate code scaffolding.<\/li>\n\n\n\n<li><strong>Dependency Graph:<\/strong> NX includes a dependency graph that visualizes relationships between different projects, making it easier to understand and manage dependencies among applications and libraries.<\/li>\n\n\n\n<li><strong>Built-in Architectural Principles:<\/strong> It encourages best practices like the separation of concerns, enforcing consistent folder structures, and providing guidelines for scalable and maintainable codebases.<\/li>\n\n\n\n<li><strong>Extensibility:<\/strong> NX is highly extensible, allowing developers to create custom generators, plugins, and configurations to suit specific project requirements.<\/li>\n\n\n\n<li><strong>DevOps Integration:<\/strong> It integrates seamlessly with various CI\/CD pipelines and DevOps workflows, facilitating automated testing, building, and deployment processes for monorepo-based projects.<\/li>\n<\/ol>\n\n\n\n<h1 class=\"wp-block-heading\">3. Sample project<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">We will create a sample project to implement the example mentioned above about an e-commerce platform with the staff app and the customer app using Nx monorepo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3.1. Create workspace and apps<\/h2>\n\n\n\n<pre class=\"wp-block-code has-white-color has-tangaroa-background-color has-text-color has-background\" style=\"padding-top:var(--wp--preset--spacing--40);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\"><code>npx create-nx-workspace<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You will be asked to specify some parameters to create the workspace as below. With the below parameters, we will create a monorepo project with a <strong>staff-app<\/strong> application.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"943\" height=\"190\" src=\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2024\/01\/image.png\" alt=\"\" class=\"wp-image-723\" srcset=\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2024\/01\/image.png 943w, https:\/\/thoaicoder.com\/wp-content\/uploads\/2024\/01\/image-300x60.png 300w, https:\/\/thoaicoder.com\/wp-content\/uploads\/2024\/01\/image-768x155.png 768w\" sizes=\"auto, (max-width: 943px) 100vw, 943px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">It will take some minutes waiting for NX to initiate the workspace. After that, we can access the workplace and create the <strong>customer-app<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-tangaroa-background-color has-text-color has-background\" style=\"padding-top:var(--wp--preset--spacing--40);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\"><code>cd nx-angular-mono-repo\nnpx nx g @nx\/angular:app customer-app --directory=apps\/customer-app<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The project structure will be as below.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"221\" height=\"679\" src=\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2024\/01\/image-1.png\" alt=\"\" class=\"wp-image-724\" srcset=\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2024\/01\/image-1.png 221w, https:\/\/thoaicoder.com\/wp-content\/uploads\/2024\/01\/image-1-98x300.png 98w\" sizes=\"auto, (max-width: 221px) 100vw, 221px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">3.2. Create product library<\/h2>\n\n\n\n<pre class=\"wp-block-code has-white-color has-tangaroa-background-color has-text-color has-background\" style=\"padding-top:var(--wp--preset--spacing--40);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\"><code>npx nx g @nx\/angular:library product --directory=libs\/product --standalone<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The <strong>product component<\/strong> will be created under <strong>libs\/product <\/strong>directory including:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>its own\u00a0<code>project.json<\/code>\u00a0file with corresponding targets you can run (e.g. running tests for just orders:\u00a0<code>nx test orders<\/code>)<\/li>\n\n\n\n<li>the name you specified in the generate command; you can find the name in the corresponding\u00a0<code>project.json<\/code>\u00a0file<\/li>\n\n\n\n<li>a dedicated\u00a0<code>index.ts<\/code>\u00a0file which is the &#8220;public API&#8221; of the library<\/li>\n\n\n\n<li>mapped in the\u00a0<code>tsconfig.base.json<\/code>\u00a0at the root of the workspace<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"221\" height=\"812\" src=\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2024\/01\/image-2.png\" alt=\"\" class=\"wp-image-725\" srcset=\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2024\/01\/image-2.png 221w, https:\/\/thoaicoder.com\/wp-content\/uploads\/2024\/01\/image-2-82x300.png 82w\" sizes=\"auto, (max-width: 221px) 100vw, 221px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">We will add some HTML\/CSS to display a product.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>libs\\product\\src\\lib\\product\\product.component.html<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-tangaroa-background-color has-text-color has-background\" style=\"padding-top:var(--wp--preset--spacing--40);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\"><code>&lt;!DOCTYPE html>\r\n&lt;html>\r\n&lt;head>\r\n&lt;style>\r\n.card {\r\n  box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);\r\n  max-width: 300px;\r\n  margin: auto;\r\n  text-align: center;\r\n  font-family: arial;\r\n}\r\n\r\n.price {\r\n  color: grey;\r\n  font-size: 22px;\r\n}\r\n\r\n.card button {\r\n  border: none;\r\n  outline: 0;\r\n  padding: 12px;\r\n  color: white;\r\n  background-color: #000;\r\n  text-align: center;\r\n  cursor: pointer;\r\n  width: 100%;\r\n  font-size: 18px;\r\n}\r\n\r\n.card button:hover {\r\n  opacity: 0.7;\r\n}\r\n&lt;\/style>\r\n&lt;\/head>\r\n&lt;body>\r\n\r\n&lt;h2 style=\"text-align:center\">Product Card&lt;\/h2>\r\n\r\n&lt;div class=\"card\">\r\n  &lt;img src=\"https:\/\/www.w3schools.com\/w3images\/jeans3.jpg\" alt=\"Denim Jeans\" style=\"width:100%\">\r\n  &lt;h1>Tailored Jeans&lt;\/h1>\r\n  &lt;p class=\"price\">$19.99&lt;\/p>\r\n  &lt;p>Some text about the jeans. Super slim and comfy lorem ipsum lorem jeansum. Lorem jeamsun denim lorem jeansum.&lt;\/p>\r\n&lt;\/div>\r\n\r\n&lt;\/body>\r\n&lt;\/html>\r\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">3.3. Use product library<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We will create a route to each app: <strong>\/product-mng <\/strong>which is the product management page in the staff portal and <strong>\/product-detail<\/strong> which is the product detail in the customer portal. We can easily use ProductComponent via @nx-angular-mono-repo\/product.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>apps\\staff-app\\src\\app\\app.routes.ts<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-tangaroa-background-color has-text-color has-background\" style=\"padding-top:var(--wp--preset--spacing--40);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\"><code>import { Route } from '@angular\/router';\r\nexport const appRoutes: Route&#91;] = &#91;\r\n    {\r\n        path: 'product-mng',\r\n        loadComponent: () =>\r\n          import('@nx-angular-mono-repo\/product').then((m) => m.ProductComponent),\r\n    },\r\n];\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><em>apps\\customer-app\\src\\app\\app.routes.ts<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-tangaroa-background-color has-text-color has-background\" style=\"padding-top:var(--wp--preset--spacing--40);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\"><code>import { Route } from '@angular\/router';\nexport const appRoutes: Route&#91;] = &#91;\n    {\n        path: 'product-detail',\n        loadComponent: () =>\n          import('@nx-angular-mono-repo\/product').then((m) => m.ProductComponent),\n    },\n];<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">3.4. Start apps <\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s start the staff app and the customer app using nx server command.<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-tangaroa-background-color has-text-color has-background\" style=\"padding-top:var(--wp--preset--spacing--40);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)\"><code>npx nx serve customer-ap\nnpx nx serve staff-ap<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The result is that each app can display the product info which is shared by ProductComponent in the library. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Staff app &#8211; product management page:<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"916\" height=\"865\" src=\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2024\/01\/image-6.png\" alt=\"\" class=\"wp-image-732\" srcset=\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2024\/01\/image-6.png 916w, https:\/\/thoaicoder.com\/wp-content\/uploads\/2024\/01\/image-6-300x283.png 300w, https:\/\/thoaicoder.com\/wp-content\/uploads\/2024\/01\/image-6-768x725.png 768w\" sizes=\"auto, (max-width: 916px) 100vw, 916px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Customer app &#8211; product detail page:<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"930\" height=\"874\" src=\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2024\/01\/image-4.png\" alt=\"\" class=\"wp-image-730\" srcset=\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2024\/01\/image-4.png 930w, https:\/\/thoaicoder.com\/wp-content\/uploads\/2024\/01\/image-4-300x282.png 300w, https:\/\/thoaicoder.com\/wp-content\/uploads\/2024\/01\/image-4-768x722.png 768w\" sizes=\"auto, (max-width: 930px) 100vw, 930px\" \/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">4. Conclusion<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">In conclusion, an Angular monorepo offers a powerful solution for managing multiple Angular applications, libraries, and shared code within a unified repository. It addresses several critical challenges faced in software development by providing a centralized structure for code sharing, maintenance, and collaboration. It empowers teams to efficiently manage complex projects, foster code quality, and streamline workflows throughout the development lifecycle. \u00a0The sample project can be found on\u00a0<a href=\"https:\/\/github.com\/ThoaiNguyenHuu842\/nx-angular-mono-repo\">GitHub<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. Introduction Managing multiple Angular applications and libraries across disparate repositories in modern software development [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":736,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[18,20,19],"class_list":["post-707","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web-development","tag-angular","tag-monorepo","tag-nx"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.14 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Managing multiple Angular application with Nx Monorepo - I \u2764 Code<\/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:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Managing multiple Angular application with Nx Monorepo - I \u2764 Code\" \/>\n<meta property=\"og:description\" content=\"1. Introduction Managing multiple Angular applications and libraries across disparate repositories in modern software development [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/\" \/>\n<meta property=\"og:site_name\" content=\"I \u2764 Code\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-30T16:31:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-06T17:33:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2023\/12\/download.png\" \/>\n\t<meta property=\"og:image:width\" content=\"324\" \/>\n\t<meta property=\"og:image:height\" content=\"156\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Thoai\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Thoai\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/\"},\"author\":{\"name\":\"Thoai\",\"@id\":\"https:\/\/thoaicoder.com\/#\/schema\/person\/a3304c209434f63c501b05622d7d2720\"},\"headline\":\"Managing multiple Angular application with Nx Monorepo\",\"datePublished\":\"2023-12-30T16:31:50+00:00\",\"dateModified\":\"2024-01-06T17:33:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/\"},\"wordCount\":777,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/thoaicoder.com\/#\/schema\/person\/a3304c209434f63c501b05622d7d2720\"},\"keywords\":[\"Angular\",\"Monorepo\",\"Nx\"],\"articleSection\":[\"Web development\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/\",\"url\":\"https:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/\",\"name\":\"Managing multiple Angular application with Nx Monorepo - I \u2764 Code\",\"isPartOf\":{\"@id\":\"https:\/\/thoaicoder.com\/#website\"},\"datePublished\":\"2023-12-30T16:31:50+00:00\",\"dateModified\":\"2024-01-06T17:33:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/thoaicoder.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Managing multiple Angular application with Nx Monorepo\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/thoaicoder.com\/#website\",\"url\":\"https:\/\/thoaicoder.com\/\",\"name\":\"I \u2764 Code\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/thoaicoder.com\/#\/schema\/person\/a3304c209434f63c501b05622d7d2720\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/thoaicoder.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/thoaicoder.com\/#\/schema\/person\/a3304c209434f63c501b05622d7d2720\",\"name\":\"Thoai\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/thoaicoder.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2023\/03\/photo_2023-01-05_22-53-32.jpg\",\"contentUrl\":\"https:\/\/thoaicoder.com\/wp-content\/uploads\/2023\/03\/photo_2023-01-05_22-53-32.jpg\",\"width\":640,\"height\":640,\"caption\":\"Thoai\"},\"logo\":{\"@id\":\"https:\/\/thoaicoder.com\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/thoaicoder.com\",\"https:\/\/www.linkedin.com\/in\/huu-thoai-nguyen\/\"],\"url\":\"https:\/\/thoaicoder.com\/index.php\/author\/admin_cvyxq4b8\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Managing multiple Angular application with Nx Monorepo - I \u2764 Code","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:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/","og_locale":"en_US","og_type":"article","og_title":"Managing multiple Angular application with Nx Monorepo - I \u2764 Code","og_description":"1. Introduction Managing multiple Angular applications and libraries across disparate repositories in modern software development [&hellip;]","og_url":"https:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/","og_site_name":"I \u2764 Code","article_published_time":"2023-12-30T16:31:50+00:00","article_modified_time":"2024-01-06T17:33:00+00:00","og_image":[{"width":324,"height":156,"url":"https:\/\/thoaicoder.com\/wp-content\/uploads\/2023\/12\/download.png","type":"image\/png"}],"author":"Thoai","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Thoai","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/#article","isPartOf":{"@id":"https:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/"},"author":{"name":"Thoai","@id":"https:\/\/thoaicoder.com\/#\/schema\/person\/a3304c209434f63c501b05622d7d2720"},"headline":"Managing multiple Angular application with Nx Monorepo","datePublished":"2023-12-30T16:31:50+00:00","dateModified":"2024-01-06T17:33:00+00:00","mainEntityOfPage":{"@id":"https:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/"},"wordCount":777,"commentCount":0,"publisher":{"@id":"https:\/\/thoaicoder.com\/#\/schema\/person\/a3304c209434f63c501b05622d7d2720"},"keywords":["Angular","Monorepo","Nx"],"articleSection":["Web development"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/","url":"https:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/","name":"Managing multiple Angular application with Nx Monorepo - I \u2764 Code","isPartOf":{"@id":"https:\/\/thoaicoder.com\/#website"},"datePublished":"2023-12-30T16:31:50+00:00","dateModified":"2024-01-06T17:33:00+00:00","breadcrumb":{"@id":"https:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/thoaicoder.com\/index.php\/2023\/12\/30\/managing-multiple-angular-application-with-nx-monorepo\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thoaicoder.com\/"},{"@type":"ListItem","position":2,"name":"Managing multiple Angular application with Nx Monorepo"}]},{"@type":"WebSite","@id":"https:\/\/thoaicoder.com\/#website","url":"https:\/\/thoaicoder.com\/","name":"I \u2764 Code","description":"","publisher":{"@id":"https:\/\/thoaicoder.com\/#\/schema\/person\/a3304c209434f63c501b05622d7d2720"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thoaicoder.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/thoaicoder.com\/#\/schema\/person\/a3304c209434f63c501b05622d7d2720","name":"Thoai","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/thoaicoder.com\/#\/schema\/person\/image\/","url":"https:\/\/thoaicoder.com\/wp-content\/uploads\/2023\/03\/photo_2023-01-05_22-53-32.jpg","contentUrl":"https:\/\/thoaicoder.com\/wp-content\/uploads\/2023\/03\/photo_2023-01-05_22-53-32.jpg","width":640,"height":640,"caption":"Thoai"},"logo":{"@id":"https:\/\/thoaicoder.com\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/thoaicoder.com","https:\/\/www.linkedin.com\/in\/huu-thoai-nguyen\/"],"url":"https:\/\/thoaicoder.com\/index.php\/author\/admin_cvyxq4b8\/"}]}},"_links":{"self":[{"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/posts\/707","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/comments?post=707"}],"version-history":[{"count":9,"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/posts\/707\/revisions"}],"predecessor-version":[{"id":733,"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/posts\/707\/revisions\/733"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/media\/736"}],"wp:attachment":[{"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/media?parent=707"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/categories?post=707"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thoaicoder.com\/index.php\/wp-json\/wp\/v2\/tags?post=707"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}