我创建的服务应该是单调(ProfilesService),但问题是在应用程序检测环境之前创建单例服务实例,因此如果我构建dev env,则不能使用模拟服务代替原始服务
使用webpack构建应用,角度为7。 基本上在用于检测环境的应用中,使用了isProduction.ts文件
declare const production: any;
export default production;
由webpack设置
config.plugins.push(
new DefinePlugin({
'production': env.prod === 'true'
}),
...
)
import isProduction from '../../environment/isProduction';
// Main Http module looks like
@NgModule({
imports: [HttpCustomModule],
providers: [
{
provide: CustomersService,
useFactory: (httpClient: HttpClient) => {
return isProduction
? new CustomersHttpService(httpClient)
: new CustomersService(httpClient);
},
deps: [HttpClient]
},
{
provide: ProfilesService,
useClass: isProduction ? ProfilesHttpService : ProfilesService,
deps: [HttpClient]
},
...
})
export class HttpBackendModule { }
我尝试使用isDevMode代替isProduction
import { NgModule, isDevMode } from '@angular/core';
但是对于isProduction和isDevMode而言,它始终为开发和生产版本返回相同的结果(模拟ProfilesService),带有useFactory的服务效果很好
package.json中的脚本
"scripts": {
"build-app:dev": "webpack --mode development --config webpack.config.app.babel.js --env.prod=true --watch",
"build-app:prod": "webpack --mode production --config webpack.config.app.babel.js --env.prod=true",