0

我在 Angular 12 中使用了模块联合,并在下面的模式中集成了 GraphQL

  1. Child2:由暴露给其他 mfe 的两个不同模块(a 和 b)组成
  2. Child1:消耗Child2的module(a)中的1个并暴露自己的module
  3. Mfe_Parent:同时使用 Child1 和 Child2(带有模块(b))

为了克服缓存破坏,我使用时间戳作为查询参数以及
Parent Mfe_Parent 中的 remotePaths

const todayTs = new Date().setHours(0, 0, 0, 0);
module.exports = {
    plugins: [
        new ModuleFederationPlugin({
            remotes: {
                "child1": `child1@https://child1.com/child1RemoteEntry.js?v=${todayTs}`,
                "child2": `child2@https://child2.com/child2RemoteEntry.js?v=${todayTs}`,
            },
       })
]};

在 Child1 Mfe 中

const todayTs = new Date().setHours(0, 0, 0, 0);
module.exports = {
    plugins: [
        new ModuleFederationPlugin({
            remotes: {
                "child2": `child2@https://child2.com/child2RemoteEntry.js?v=${todayTs}`,
            },
       })
]};

因此,使用这种方法,在构建时使用的时间戳“todayTs”将是相同的,并且只会创建一个 child2 的实例,Mfe_Parent 和 Child1 都将使用该实例。但是使用这种方法,如果 Mfe_Parent 有任何需要部署的更改,即使没有进行任何更改,我们仍然必须部署 Child1,否则,远程路径中的“todayTs”将不同,并且两个实例将是为 Child2 创建。由于创建了两个实例,GraphQL 无法从各自调用的 mfes 创建模块的两个不同实例。

是否有任何可能的配置或任何方式可以消除这种依赖关系,并且只能部署 Mfe_Parent 而不必总是部署 Child1。

4

0 回答 0