Skip to content

marvelmiles/angular-react-monorepo

Repository files navigation

Angular-React Monorepo Integration Demo

This project demonstrates the seamless integration of Angular and React components within a single monolithic app using the NX Monorepo tools. The primary goal is to leverage the power of both frameworks in a cohesive application that allows Angular to manage routing and state while React is responsible for handling dynamic data visualizations.

Note

NX Build for production hosting

To deploy nx for CI hosting, Add tasksRunnerOptions to specify that you want to use the local runner instead of the cloud runner, remove the nxCloudId line.

"tasksRunnerOptions": {
"default": {
"runner": "nx/tasks-runners/default",
"options": {
"cacheableOperations": ["build", "lint", "test"],
"accessToken": "not-needed"
    }
  }
}

Features

  • Monorepo Architecture: Both Angular and React apps live in the same repository, using NX to manage their dependencies and build processes efficiently.

  • Data Visualization: The React component renders interactive charts and visual data representations.

  • Form Input & Validation: Angular manages user input for chart configurations (aspect ratio and colors), validating the input before passing it to the React component.

Architecture

  • Angular: Handles routing and form inputs.

  • React: Responsible for rendering data visualizations, making use of reusable components for dynamic updates.

Key Challenge

  • Shadow DOM Encapsulation Issue

    • Challenge: Initially, I attempted to use Shadow DOM encapsulation for the custom Web Component that renders the React visualizer. However, TailwindCSS and React components do not render properly inside the Shadow DOM due to style isolation.

    • Solution: Instead of using the Shadow DOM, I manually retrieved the DOM from the app.component.html in Angular and mounted the React component onto it. This approach bypasses the style isolation issue, allowing TailwindCSS to be applied globally and making the integration smoother.

✨ Your new, shiny Nx workspace is almost ready ✨.

Learn more about this workspace setup and its capabilities or run npx nx graph to visually explore what was created. Now, let's get you up to speed!

Finish your remote caching setup

Click here to finish setting up your workspace!

Run tasks

To run the dev server for your app, use:

npx nx serve angular-app

To create a production bundle:

npx nx build angular-app

To see all available targets to run for a project, run:

npx nx show project angular-app

These targets are either inferred automatically or defined in the project.json or package.json files.

More about running tasks in the docs »

Add new projects

While you could add new projects to your workspace manually, you might want to leverage Nx plugins and their code generation feature.

Use the plugin's generator to create new projects.

To create a new project, use:

npx create-nx-workspace@latest project-name

To add a new plugin (e.g react), use:

npx nx g @nx/[plugin_name]

To generate a new application, cd into apps and run:

npx nx g @nx/[plugin_name]:app app-name

To generate a new library, use:

npx nx g @nx/angular:lib mylib

Note

Install nx console extension on your editor to run this commands easily.

You can use npx nx list to get a list of installed plugins. Then, run npx nx list <plugin-name> to learn about more specific capabilities of a particular plugin. Alternatively, install Nx Console to browse plugins and generators in your IDE.

Learn more about Nx plugins » | Browse the plugin registry »

Learn more about Nx on CI

Install Nx Console

Nx Console is an editor extension that enriches your developer experience. It lets you run tasks, generate code, and improves code autocompletion in your IDE. It is available for VSCode and IntelliJ.

Install Nx Console »

Useful links

Learn more:

And join the Nx community:

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published