Я пытаюсь условно импортировать модуль, основываясь на том, указан ли в моем файле среды ключ firebase API. Когда нет ключа API, я не хочу загружать модули Firebase. Когда значения заданы в файле среды, я хочу загрузить как AngularFireAuthModule
, так и AngularFireModule.initializeApp(firebaseConfig)
.
. Вот как я это делаю в Angular 7:
import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { NgModule } from '@angular/core';
import { AngularFireModule } from '@angular/fire';
import { AngularFireAuthModule } from '@angular/fire/auth';
import { environment } from '../../../environments/environment';
import { AlwaysLoggedInProvider } from './identity/providers/always-logged-in-provider';
import { AuthHttpInterceptor } from './interceptors/auth-http-interceptor';
import { FirebaseProvider } from './identity/providers/firebase-provider';
import { IdentityProviderToken } from './identity/identity-provider';
const firebaseConfig = environment.firebase;
export const identityProvider = isFirebaseConfigured() ? FirebaseProvider : AlwaysLoggedInProvider;
export function identityProviderModules() {
if (isFirebaseConfigured) {
return [AngularFireModule.initializeApp(firebaseConfig), AngularFireAuthModule];
} else {
return [];
}
}
export function isFirebaseConfigured() {
return firebaseConfig && 'apiKey' in firebaseConfig && firebaseConfig.apiKey !== '';
}
@NgModule({
imports: [...identityProviderModules()],
providers: [
{ provide: IdentityProviderToken, useClass: identityProvider },
{
provide: HTTP_INTERCEPTORS,
useClass: AuthHttpInterceptor,
multi: true,
},
],
})
export class AuthenticationModule { }
Теперь, после обновления до Angular 9, кажется, что все работает, но при компиляции я получаю следующие ошибки:
ERROR in src/app/services/authentication/authentication.module.ts:30:12 - error NG1010: Value at position 0 in the NgModule.imports of AuthenticationModule is not a reference: [object Object]
30 imports: [...identityProviderModules()],
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/app/services/authentication/authentication.module.ts:40:14 - error NG6002: Appears in the NgModule.imports of LoginModule, but could not be resolved to an NgModule class.
Is it missing an @NgModule annotation?
40 export class AuthenticationModule { }
~~~~~~~~~~~~~~~~~~~~
src/app/login/login.module.ts:26:14 - error NG6002: Appears in the NgModule.imports of AppModule, but itself has errors
26 export class LoginModule {}
Я посмотрел вокруг и заметил, что это вызвано AoT компиляция (которую я хочу сохранить) и потому, что у меня есть условие внутри identityProviderModules()
. Я нашел несколько решений для провайдеров, но так как я работаю с импортом, я не думаю, что он будет мне полезен, если не будет способа преобразовать эти модули в провайдеров.
Что было бы правильным способ условно импортировать модули на основе значения в файле среды? Как я могу заставить AoT скомпилировать это?