angular-cli:使用环境变量进行条件导入

达伦·凯克(Daren Keck)

有没有一种方法可以根据[email protected]中的环境变量有条件地更改导入?我正在尝试以一种不需要在客户端代码中导入服务的方式更改代码的方式来执行此操作,但是当需要时,我可以指定一个构建标记来交换模拟服务。

我在这篇文章中尝试使用一种模式

文件结构:

MyService
    MyServiceMock.ts
    MyServiceReal.ts
    index.ts

在index.ts中,您可以拥有以下内容:

import { environment} from '../environments/environment';

export const MyService = environment.mock ?
    require('./MyServiceMock').MyServiceMock:
    require('./MyServiceReal').MyServiceReal;

在您的客户端代码中,导入MyService:

import MyService from './myservice/index';

页面加载完毕,我可以看到单步执行代码时注入了依赖性,但是在的两边有编译错误(我认为是TypeScript错误)Cannot find name 'MyService'

保罗·萨姆索塔

您正在做的事情完全错误。当您配置Angular时,可以使用工厂来处理此用例providers

providers: [
  Any,
  Dependencies
  {
    provide: MyService, 
    useFactory: (any: Any, dependencies: Dependencies) => {
      if (environment.production) {
        return new MyService(any, dependencies);
      } else {
        return new MockMyService(any, dependencies);
      }
    },
    deps: [ Any, Dependencies ]
]

现在,MyService由于,您可以随处注入代码provide: MyService,但是在开发中,您将获得模拟,而在生产中,您将获得真正的服务。

也可以看看:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章