【问题标题】:Angular module federation singleton service initiated multiple timesAngular 模块联合单例服务多次启动
【发布时间】:2021-09-13 06:48:11
【问题描述】:

我正在关注这个 tutorial ,并尝试在 shell 和 mfe1 应用程序之间共享一个库。 我在工作区目录之外创建了一个在 root 中注入的服务的 lib,然后将其添加到教程 package.json,并将其导入到 shell 和 mfe1 中。 在两个项目的 webpack 配置中,我添加了以下配置

new ModuleFederationPlugin({
      .....
        },        
        shared: {
          .....
          "my-lib": { singleton: true, strictVersion: true, requiredVersion: '1.0.0'},
          ...sharedMappings.getDescriptors()
        }
        
    }),

在测试 shell 时,我注意到单例服务被启动了两次,第一次是在加载 shell 时,第二次是在移动到 mfe1 时,也许我遗漏了什么,但这不是 @987654323 的目的@config 是为了确保该服务只存在一个实例?

【问题讨论】:

    标签: angular webpack-module-federation


    【解决方案1】:

    使用联合模块插件,当共享库上的单例属性设置为 true 时,这意味着即使多个 mfe 需要该库,该库也只会加载一次。 如果您的 mfe 或 shell 需要不同版本的库,strictVersion: true 将导致错误。

    这与角度服务无关,即使lib只加载一次,也不意味着它的服务将是单例的。

    如果您希望服务成为跨多个模块的单例,您应该确保在根注入器中提供该服务,方法是添加:

    @Injectable({
      providedIn: 'root'
    })
    

    或者通过确保服务被声明为 shell 应用模块的提供者,而不是在任何其他模块中声明为提供者。

    【讨论】:

    • 使用该教程,您必须从身份验证服务中删除@Injectable,否则,即使它指定了providedIn: 'root',它仍然会实例化两次。一次在 shell 应用程序中,然后再次在遥控器中。我在app模块中提供了服务
    猜你喜欢
    • 2016-08-30
    • 2017-05-13
    • 1970-01-01
    • 2017-02-14
    • 2017-06-21
    • 2017-01-28
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多