Angular 角形电缆E&;使用工厂开关

Angular 角形电缆E&;使用工厂开关,angular,protractor,angular-cli,Angular,Protractor,Angular Cli,我正在尝试为Angular 4提供程序工厂设计一种模式,以便在运行ng e2e时切换使用的实现 我已经研究过如何在angular cli中进行一些操作,但是遇到了ng serve-e e2e $ ng serve -e e2e Cannot read property 'length' of undefined TypeError: Cannot read property 'length' of undefined at createSourceFile (/home/user/Doc

我正在尝试为Angular 4提供程序工厂设计一种模式,以便在运行
ng e2e
时切换使用的实现

我已经研究过如何在angular cli中进行一些操作,但是遇到了
ng serve-e e2e

$ ng serve -e e2e
Cannot read property 'length' of undefined
TypeError: Cannot read property 'length' of undefined
    at createSourceFile (/home/user/Documents/workspace/ngproj/node_modules/typescript/lib/typescript.js:15457:109)
    at parseSourceFileWorker (/home/user/Documents/workspace/ngproj/node_modules/typescript/lib/typescript.js:15389:26)
    at Object.parseSourceFile (/home/user/Documents/workspace/ngproj/node_modules/typescript/lib/typescript.js:15338:26)
    at Object.createSourceFile (/home/user/Documents/workspace/ngproj/node_modules/typescript/lib/typescript.js:15192:29)
    at VirtualFileStats.getSourceFile (/home/user/Documents/workspace/ngproj/node_modules/@ngtools/webpack/src/compiler_host.js:66:35)
    at WebpackCompilerHost.getSourceFile (/home/user/Documents/workspace/ngproj/node_modules/@ngtools/webpack/src/compiler_host.js:213:38)
    at findSourceFile (/home/user/Documents/workspace/ngproj/node_modules/typescript/lib/typescript.js:67909:29)
    at processImportedModules (/home/user/Documents/workspace/ngproj/node_modules/typescript/lib/typescript.js:68056:25)
    at findSourceFile (/home/user/Documents/workspace/ngproj/node_modules/typescript/lib/typescript.js:67937:17)
    at processImportedModules (/home/user/Documents/workspace/ngproj/node_modules/typescript/lib/typescript.js:68056:25)
    at findSourceFile (/home/user/Documents/workspace/ngproj/node_modules/typescript/lib/typescript.js:67937:17)
    at processImportedModules (/home/user/Documents/workspace/ngproj/node_modules/typescript/lib/typescript.js:68056:25)
    at findSourceFile (/home/user/Documents/workspace/ngproj/node_modules/typescript/lib/typescript.js:67937:17)
    at processSourceFile (/home/user/Documents/workspace/ngproj/node_modules/typescript/lib/typescript.js:67840:27)
    at processRootFile (/home/user/Documents/workspace/ngproj/node_modules/typescript/lib/typescript.js:67728:13)
    at /home/user/Documents/workspace/ngproj/node_modules/typescript/lib/typescript.js:67018:60
const authFactory = (http) => {
  if (environment.useRestApi) {
    console.log('Using HTTP REST Api')
    return new HttpAuthService(http);
  } else {
    console.log('Using In Memory REST Api')
    return new InMemoryAuthService();
  }
};

@NgModule({
  imports: [
    CommonModule,
    HttpModule
  ],
  declarations: [],
  providers: [
    {
      provide: AuthService,
      useFactory: authFactory,
      deps: [Http]
    }
  ]
})
export class AuthModule {
}
忽略这一特定问题,是否有人有基于cli参数或特定环境(例如通过
ng e2e
检测应用程序正在运行)的提供商工厂和切换实现的良好模式

我对使用
MockBackend
/
MockConnection
不感兴趣(我在.spec.ts文件中使用了它们来测试
HttpAuthService

堆栈跟踪更新 堆栈跟踪是由my.angular-cli.json文件中的键入错误引起的:

  "environments": {
    "dev": "environments/environment.ts",
    "prod": "environments/environment.prod.ts",
    "e2e": "environments/environments.e2e.ts"
  }
这里引用的e2e文件在文件名中有一个额外的“s”。与往常一样,ng cli/webpack/ts/node以一种明显的方式告诉我这一点,这确实是件好事

我仍然对其他选择持开放态度,所以我将把这作为一个更新而不是一个答案(希望那些尚未回答的问题可能会引起更多的兴趣),但同时,使用一个环境对我来说是可行的