如何使用单例模式拆分服务的prod和dev实例

时间:2019-05-15 10:16:25

标签: angular

我创建的服务应该是单调(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",

0 个答案:

没有答案