Javascript 如何使用在Angular';中使用条件导出的类;s应用程序模块?
如果你想更深入地理解它,这就是故事的要旨 我正在尝试在app.module中使用此类: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
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