【发布时间】:2020-06-19 02:07:39
【问题描述】:
上下文
在 Angular 9 项目中,我使用两种环境:production 和 mock。
在核心模块中,我检查模拟环境。
-
如果使用模拟配置进行构建,我会注入返回模拟数据的模拟服务,因此不会发出外部 http 请求。
-
如果使用 prod 配置进行构建,则注入真正的服务。
我是这样做的:
core.module.ts
@NgModule({
declarations: [],
providers: [],
imports: [BrowserModule, HttpClientModule],
exports: [],
})
export class CoreModule {}
country.service.proxy.ts
const countryServiceFactory = (
_http: HttpClient,
_errorUtil: ErrorUtilService
) => {
return isMock
? new ServiceMock()
: new Service(_http, _errorUtil);
};
@Injectable({
providedIn: CoreModule,
useFactory: countryServiceFactory,
})
export abstract class CountryServiceProxy {
abstract getCountries(): Observable<CountryWithLanguages[]>;
}
其中ServiceMock 和Service 实现相同的接口。
这行得通。
问题
代码不是可摇树。结果是在我的包中(当我运行ng build --prod 时)甚至包括模拟服务。
我想在开发过程中将每个服务从 mock 切换到 prod。
目标
如何让 Angular 只捆绑将要使用的服务?
我正在使用:
Angular CLI: 9.0.4
Node: 13.6.0
OS: darwin x64
Ivy Workspace: Yes
谢谢! :)
【问题讨论】:
-
您是否尝试过在您的
environment.ts文件中设置不同的版本?我实际上不知道这是否可行 - 只是一个建议! -
@KurtHamilton 版本是什么?我的环境有键:
mock和production
标签: angular typescript service bundle tree-shaking