离子2 env变量

时间:2017-11-01 20:55:09

标签: angular ionic2 environment-variables

我想在我的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]错误

这样做的正确方法是什么?

0 个答案:

没有答案