Angular 跨域动态组件加载器

Angular cross-domain dynamic component loader

我正在使用 Angular 研究微前端的可能性。我正在研究让 UI 的不同部分独立地由它们自己的 HTTP 服务器进程提供服务但在主要 UI 上动态组合的可行性;这只是一个 UI 模板,其中包含要由这些动态加载的微前端替换的占位符。

目前我们为此使用 iframe,除了客户端浏览器所需的额外资源以及不太动态和有限的方法外,它的效果很好。

我的问题是,是否有可能在 Angular 应用程序中有一个组件实现共享和众所周知的组件接口,从另一个 URL 动态加载;在我们的例子中是子域名?

例如,我们有以下域:

  1. domain.com
  2. sub1.domain.com
  3. sub2.domain.com

我们从 sub1 获得了以下组件。domain.com:

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'sales-frontend',
  templateUrl: './sales-frontend.component.html',
  styleUrls: ['./sales-frontend.component.css']
})

export class SalesFrontEndComponent implements SharedInterface, OnInit {
  constructor() { }

  ngOnInit() {
  }
}

是否可以从 sub1.domain.comdomain.com[main UI] 上动态加载它?

另一个组件也是如此,例如 sub2 提供的 ProductsFrontEndComponent。domain.com。

非常感谢修道院!

说到 Angular - 我见过以几种不同的方式完成此操作,每种方式都有自己不同的陷阱,我个人不喜欢这两种选择,原因有一个 - 它们使开发和/或部署变得更加复杂而不是简化它。对我来说,它破坏了微前端的目的。

如果你个人有一些“足够好”的东西,我会坚持下去,直到 Webpack Module Federation 被完善。简而言之 - 模块联合允许在编译时轻松引用未知的模块,这应该完美地涵盖您的情况。

下面是关于该主题的一堆资源(包括示例,Angular 包括在内):