Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用在Angular';中使用条件导出的类;s应用程序模块?_Javascript_Angular_Typescript_Keycloak - Fatal编程技术网

Javascript 如何使用在Angular';中使用条件导出的类;s应用程序模块?

Javascript 如何使用在Angular';中使用条件导出的类;s应用程序模块?,javascript,angular,typescript,keycloak,Javascript,Angular,Typescript,Keycloak,如果你想更深入地理解它,这就是故事的要旨 我正在尝试在app.module中使用此类: import { Injectable } from '@angular/core'; import { KeycloakService } from 'keycloak-angular'; import { environment } from '../../../environments/environment'; @Injectable({ providedIn: 'root' }) export c

如果你想更深入地理解它,这就是故事的要旨

我正在尝试在app.module中使用此类:

import { Injectable } from '@angular/core';
import { KeycloakService } from 'keycloak-angular';
import { environment } from '../../../environments/environment';

@Injectable({ providedIn: 'root' })
export class MockKeycloakService { 

    init(ign: any) {
        console.log('[KEYCLOAK] Mocked Keycloak call');
        return Promise.resolve(true);
    }

    getKeycloakInstance() {
        return {
            loadUserInfo: () => {
                let callback;
                Promise.resolve().then(() => {
                    callback({
                    username: '111111111-11',
                    name: 'Whatever Something de Paula',
                    email: 'whatever@gmail.com',
                  });
                });
                return { success: (fn) => callback = fn };
            }
        } as any;
    }    
    login() {}      
    logout() {}
}

const exportKeycloak = 
    environment.production ? KeycloakService : MockKeycloakService;    
export default exportKeycloak; 
这个有条件的导出伪造了keydepot调用,以便在本地开发中使用,并在生产中返回真实的类

这是我使用的app.module:

<...>
import { KeycloakAngularModule } from 'keycloak-angular';
import KeycloakService from './shared/services/keycloak-mock.service';
import { initializer } from './app-init';
<...>

    imports: [
        KeycloakAngularModule,
         <...>  
    ],
    providers: [
        <...>,
        {
            provide: APP_INITIALIZER,
            useFactory: initializer,
            multi: true,
            deps: [KeycloakService, <...>]
        },
        <...>
    ],
    bootstrap: [AppComponent]
})
export class AppModule { }
我猜生成器任务无法理解模拟类中要在app.module中使用的条件导出

因此,这迫使我在appinit中同时使用两个类和我使用的另一个类,并在每个类中检查环境模式。我认为如果我可以只使用一个类来处理这个问题,并将它导入到所有需要的地方,这将是一个更好的解决方案

这是我的生成命令:

ng build --prod=true --configuration=production --delete-output-path --output-path=dist/

如何在构建中克服此错误?也。。。究竟为什么在开发模式下都能很好地工作,而构建的行为却不同?

我猜您使用的是Angular 8或更少

这些版本中的AOT编译器将引用解析为默认导出

所以你应该更具体一些:

keydove模拟服务.ts

const KeycloakServiceImpl =
  environment.production ? KeycloakService : MockKeycloakService;
export { KeycloakServiceImpl };
import { KeycloakServiceImpl } from './keycloak-mock.service';

...
deps: [KeycloakServiceImpl]
应用程序模块.ts

const KeycloakServiceImpl =
  environment.production ? KeycloakService : MockKeycloakService;
export { KeycloakServiceImpl };
import { KeycloakServiceImpl } from './keycloak-mock.service';

...
deps: [KeycloakServiceImpl]
提示:

ng build--prod
相当于
ng build--prod=true--configuration=production