无法静态确定值 'window'

A value 'window' cannot be determined statically

在我的 Angular 12 应用程序中,我有一个类似

的模块
@NgModule({
  imports:      [ window.config.myConfXY ? ModuleX : ModuleY ],
  providers:    [ ... ],
  declarations: [ ]
})
export class AppModule { }

但编译器抱怨:“'window' 的值无法静态确定,因为它是外部声明。”

我正在尝试在传入一些环境变量的 nginx 容器中部署应用程序。生成的“env.js”在 index.html 中被引用并定义了 window.config.

错误是什么意思,我该如何解决?不幸的是,关于网络上的错误描述,我没有发现任何有用的信息。

据我了解,这不可能

Angular 编译器需要在构建时本身评估 NgModule imports 即它需要静态评估条件。它需要在编译期间知道该值,并且不能等到运行时才评估这些值。编译器无法在编译期间了解 window 对象值。

考虑到我们没有在应用程序中自己声明 window 对象并且 Angular 无法在编译时确定其值,因此出现以下错误:

A value for 'window' cannot be determined statically, as it is an external declaration.

一种可能的解决方案是使用环境文件。我们在 angular.json 文件中有 fileReplacements,因此我们可以在环境文件中定义配置 属性。由于我们可以根据不同的环境拥有多个文件,因此在构建期间,编译器应该能够静态评估环境配置 属性 值。

资源: