我想在我的Ionic应用程序中使用env变量,基于构建脚本中使用NODE_ENV
设置的值。我创建了以下模块:
import { NgModule, ModuleWithProviders, Provider } from '@angular/core';
import { OpaqueToken } from '@angular/core';
export interface IEnv {
apiBaseUrl?: string;
}
export let EnvService = new InjectionToken<IEnv>('env.variables');
declare const process: any;
@NgModule({})
export class EnvModule {
static forVariables(envs: IEnv): ModuleWithProviders {
return {
ngModule: EnvModule,
providers: [{
provide: EnvService,
useFactory: (): IEnv => {
switch (process.env.NODE_ENV) {
case 'prod':
return Object.assign({
name: 'production'
}, envs);
case 'dev':
return Object.assign({
name: 'development'
}, envs);
}
}
}]
}
}
}
我将其导入Ionic 2模块:
@NgModule({
providers: [
EnvModule.forVariables({
apiBaseUrl: 'http:/...'
})
]
})
除非我使用离子构建的prod
版本,否则这样可以正常工作,因此如果我使用ionic-app-scripts build --prod
,则会出现以下错误:
Error: Error encountered resolving symbol values statically. Function calls are not supported
所以我重写了我的模块:
export function provideVariables(envs: IEnv) {
switch (process.env.NODE_ENV) {
case 'prod':
return Object.assign({
name: 'production'
}, envs);
case 'dev':
return Object.assign({
name: 'development'
}, envs);
}
}
@NgModule({})
export class EnvModule {
static forVariables(envs: IEnv): ModuleWithProviders {
return {
ngModule: EnvModule,
providers: [{
provide: EnvService,
useFactory: provideVariables,
deps: [envs]
}]
}
}
}
但现在我收到No provider for [object Object]
错误
这样做的正确方法是什么?