角度:从构建中排除服务模拟(摇树)

时间:2020-02-21 16:01:00

标签: angular dependency-injection bundle bundling-and-minification tree-shaking

上下文

在Angular 9项目中,我正在使用两种环境:生产模拟

在核心模块中,我检查模拟环境。

  • 如果构建是通过模拟配置进行的,我将注入返回模拟数据的模拟服务,因此不会发出外部http请求。

  • 如果使用产品配置进行构建,则会注入真实服务。

我这样做是这样的:

@NgModule({
  declarations: [],
  providers: [
    {
      provide: 'AuthenticationApi',
      useClass: environment.mock
        ? AuthenticationServiceMock
        : AuthenticationService,
    }
  ],
  imports: [BrowserModule, HttpClientModule],
  exports: [],
})
export class CoreModule {}

其中AuthenticationApi是定义登录方法的接口,而AuthenticationServiceMockAuthenticationService实现该接口。

好的,可以。

问题

如您所见,我正在使用 Angular 5提供程序。因此,代码不是可摇树的。结果是在我的捆绑包中(当我运行ng build --prod时)甚至包括了模拟服务。

我已尝试在条件中使用providerIn,但似乎不支持它。

我知道一个可能的解决方法是使用拦截器模拟这些http调用,但是我认为这不适用于我的情况,因为我想在开发过程中将每个服务从模拟切换为生产。

也许有一种方法可以为每个服务创建一个拦截器?而不将其包含在生产版本中?

目标

如何使Angular仅捆绑将要使用的服务?此信息在编译时是已知的。


我正在使用:

Angular CLI: 9.0.0-rc.10
Node: 13.6.0
OS: darwin x64

Ivy Workspace: Yes

谢谢! :)

0 个答案:

没有答案