Angular:app.module.ts中的if语句行为很奇怪

问题描述 投票:1回答:1

我们最近在app.module.ts中遇到了奇怪的行为。我们正在使用environment.ts和environemnt.prod.ts文件在模块的imports数组中包括/排除特定的库(生产构建应排除库)。它看起来像这样:

import { environment } from '../environments/environment'
//
@NgModule({
//
  imports: [
    CommonModule,
    BrowserModule,
    environment.production ? [] : libraryXXX,
    HttpClientModule,
    FormsModule
  ],

经过几天的无聊调查,我们发现每次都在库中包含libraryXXX,即使带有--prod标志。我们测试了问题所在-正确读取了environment.ts / prod.ts文件中的值,但是由于任何原因,比较总是返回false。我的意思是总是:用[

替换上面的片段
environment.production == true ? [] : libraryXXX

environment.production == false ? [] : libraryXXX

没有更改任何东西-总是包含库。就像if语句损坏了(?)。将其提取为变量并没有改变。我们最终做了半hacky解决方案,例如:

environment.ts

import { libraryXXX } from 'whatever'

export const environment = {
  production: false,
  libraryXXX: libraryXXX
}

environment.prod.ts

export const environment = {
  production: true,
  libraryXXX: []
}

并且仅引用app.module.ts中的environment.libraryXXX。但是出于好奇-有人可以向我解释如果陈述失败了为什么简单吗?由于它是app.module.ts,所以我无法调试它,甚至无法查看控制台输出,以了解发生了什么。有人有主意吗?

javascript angular typescript build environment
1个回答
-1
投票

您可以做什么:

您可以同时导入库,prod和模拟版本。

然后您可以决定(environment.production)两者中的哪一个将提供:

providers: [
   {
      provide: DbTrassenanfrageStatusService,
      useClass: environment.production ? XyzMockService : XyzService
   }
]
© www.soinside.com 2019 - 2024. All rights reserved.