在Angular 9项目中,我正在使用两种环境:生产和模拟。
在核心模块中,我检查模拟环境。
如果构建是通过模拟配置进行的,我将注入返回模拟数据的模拟服务,因此不会发出外部http请求。
如果使用产品配置进行构建,则会注入真实服务。
我这样做是这样的:
@NgModule({
declarations: [],
providers: [
{
provide: 'AuthenticationApi',
useClass: environment.mock
? AuthenticationServiceMock
: AuthenticationService,
}
],
imports: [BrowserModule, HttpClientModule],
exports: [],
})
export class CoreModule {}
其中AuthenticationApi
是定义登录方法的接口,而AuthenticationServiceMock
和AuthenticationService
实现该接口。
好的,可以。
如您所见,我正在使用 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
谢谢! :)