我们最近在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,所以我无法调试它,甚至无法查看控制台输出,以了解发生了什么。有人有主意吗?
您可以做什么:
您可以同时导入库,prod和模拟版本。
然后您可以决定(environment.production)两者中的哪一个将提供:
providers: [
{
provide: DbTrassenanfrageStatusService,
useClass: environment.production ? XyzMockService : XyzService
}
]