Angular 模块联合 -- 共享模块不可用于急切消费

Angular Module Federation -- Shared module is not available for eager consumption

在我的 Angular 微前端上尝试 运行 测试以在 Module Federation 中使用时出现此问题。 Angular 12, Webpack 5.

Uncaught Error: Shared module is not available for eager consumption: 5487

这些模块如何配置eager consumption?

在大多数情况下,通过在共享的公共 Angular 模块上设置 eager: true 来解决此问题:

        
shared: share({
  "@angular/core": { singleton: true, strictVersion: true, requiredVersion: 'auto', eager: true },
  "@angular/common": { singleton: true, strictVersion: true, requiredVersion: 'auto', eager: true },
  "@angular/common/http": { singleton: true, strictVersion: true, requiredVersion: 'auto', eager: true },
  "@angular/router": { singleton: true, strictVersion: true, requiredVersion: 'auto', eager: true },

创建一个单独的 webpack.conf 用于测试

您可以在主 webpack.config.js 中将所有共享模块设置为 eager: true,但这会迫使您使用更大的包大小,这是 Module Federation 旨在避免的事情之一。

一个更好的选择可能是设置一个单独的 webpack.test.config.js,,它将仅用于 运行 测试,并在该文件中将您的模块设置为 eager: true:

webpack.test.config.js

shared: share({
  "@angular/core": { 
    eager: true, 
    singleton: true, 
    strictVersion: true, 
    requiredVersion: 'auto' 
  },
  "@angular/common": { 
    eager: true, 
    singleton: true, 
    strictVersion: true, 
    requiredVersion: 'auto' 
  },
  "@angular/common/http": { 
    eager: true, 
    singleton: true, 
    strictVersion: true, 
    requiredVersion: 'auto' 
  }
})