Building Micro-Frontend Architectures with Angular

Strategies for decomposing large Angular applications into smaller, independent micro-frontends to enhance scalability and maintainability.

0 likes
7 views

Rule Content

{
  "title": "Building Micro-Frontend Architectures with Angular",
  "description": "Strategies for decomposing large Angular applications into smaller, independent micro-frontends to enhance scalability and maintainability.",
  "category": "Angular Cursor Rules",
  "rules": [
    {
      "id": "angular-microfrontend-domain-separation",
      "description": "Ensure each micro-frontend corresponds to a distinct business domain or subdomain to maintain clear boundaries and reduce interdependencies.",
      "severity": "error",
      "tags": ["architecture", "modularity"],
      "check": {
        "type": "module",
        "criteria": [
          {
            "type": "dependency",
            "condition": "cross-domain",
            "message": "Module should not depend on components or services from other business domains."
          }
        ]
      }
    },
    {
      "id": "angular-microfrontend-independent-deployment",
      "description": "Design micro-frontends to be independently deployable, allowing teams to develop, test, and deploy without affecting other parts of the application.",
      "severity": "warning",
      "tags": ["deployment", "independence"],
      "check": {
        "type": "ci-cd",
        "criteria": [
          {
            "type": "pipeline",
            "condition": "independent",
            "message": "Micro-frontend should have its own CI/CD pipeline."
          }
        ]
      }
    },
    {
      "id": "angular-microfrontend-shared-libraries",
      "description": "Utilize shared libraries for common functionalities across micro-frontends to promote consistency and reduce redundancy.",
      "severity": "info",
      "tags": ["code-reuse", "consistency"],
      "check": {
        "type": "import",
        "criteria": [
          {
            "type": "library",
            "condition": "shared",
            "message": "Consider using shared libraries for common functionalities."
          }
        ]
      }
    },
    {
      "id": "angular-microfrontend-module-federation",
      "description": "Implement Webpack Module Federation to dynamically load and share modules between micro-frontends at runtime.",
      "severity": "error",
      "tags": ["module-federation", "dynamic-loading"],
      "check": {
        "type": "webpack-config",
        "criteria": [
          {
            "type": "plugin",
            "condition": "module-federation",
            "message": "Webpack configuration should include Module Federation Plugin."
          }
        ]
      }
    },
    {
      "id": "angular-microfrontend-routing",
      "description": "Configure each micro-frontend with its own routing and integrate with a global router to manage navigation seamlessly.",
      "severity": "warning",
      "tags": ["routing", "navigation"],
      "check": {
        "type": "routing",
        "criteria": [
          {
            "type": "module",
            "condition": "lazy-loaded",
            "message": "Micro-frontend modules should be lazy-loaded."
          }
        ]
      }
    },
    {
      "id": "angular-microfrontend-communication",
      "description": "Establish clear communication protocols between micro-frontends using event-driven architecture or shared state management solutions.",
      "severity": "warning",
      "tags": ["communication", "state-management"],
      "check": {
        "type": "service",
        "criteria": [
          {
            "type": "event-emitter",
            "condition": "shared",
            "message": "Use shared event emitters for inter-micro-frontend communication."
          }
        ]
      }
    },
    {
      "id": "angular-microfrontend-security",
      "description": "Implement security best practices, including input validation and secure communication channels, to protect each micro-frontend.",
      "severity": "error",
      "tags": ["security", "best-practices"],
      "check": {
        "type": "security",
        "criteria": [
          {
            "type": "input-validation",
            "condition": "implemented",
            "message": "Ensure input validation is implemented to prevent security vulnerabilities."
          }
        ]
      }
    },
    {
      "id": "angular-microfrontend-performance",
      "description": "Optimize performance by implementing lazy loading, code splitting, and efficient caching strategies within each micro-frontend.",
      "severity": "info",
      "tags": ["performance", "optimization"],
      "check": {
        "type": "performance",
        "criteria": [
          {
            "type": "lazy-loading",
            "condition": "enabled",
            "message": "Lazy loading should be enabled to improve performance."
          }
        ]
      }
    },
    {
      "id": "angular-microfrontend-testing",
      "description": "Ensure comprehensive testing strategies, including unit, integration, and end-to-end tests, are in place for each micro-frontend.",
      "severity": "warning",
      "tags": ["testing", "quality-assurance"],
      "check": {
        "type": "testing",
        "criteria": [
          {
            "type": "coverage",
            "condition": "sufficient",
            "message": "Test coverage should meet the project's quality standards."
          }
        ]
      }
    },
    {
      "id": "angular-microfrontend-documentation",
      "description": "Maintain clear and up-to-date documentation for each micro-frontend, detailing APIs, dependencies, and deployment processes.",
      "severity": "info",
      "tags": ["documentation", "maintainability"],
      "check": {
        "type": "documentation",
        "criteria": [
          {
            "type": "completeness",
            "condition": "adequate",
            "message": "Documentation should be comprehensive and current."
          }
        ]
      }
    }
  ]
}