angular - Firestore Yerel Emülatör Firebase 9 Compat ile çalışmıyor


Yakın zamanda uygulamamı Firebase 9 kullanacak şekilde yükseltme sürecine başladım. Bu sürece (https://firebase.google.com/docs/web/modular-upgrade adresinde önerildiği gibi) tüm importlarımı Firebase 9 uyumlu modüllerle güncelleyerek başladım. Bu tamamen sorunsuz çalıştı, uygulama açılıyor, ancak yerel Firestore emülatörümle bağlantı kurmuyor gibi görünüyor. Konsolda şu hatayı alıyorum:

Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds.

Daha sonra emülatörümü kapattım, gerçek çevrimiçi Firestore'uma bağlanmak için, ve ardından uygulama sorunsuz çalıştı.

Denemek için küçük bir Ionic uygulaması oluşturmayı karar verdim. Firebase 9 modüler kütüphanelerine geçer geçmez, yerel Firestore emülatörüme bağlanabiliyorum.

Aşağıda bazı kodlar - İlk olarak, emulator ile çalışmayan uyumluluk modüllerini kullanıyor. (deneyselForceLongPolling'e dikkat edin - çevrimiçi olarak önerilen ama işe yaramayan bir şey)

import { AngularFirestoreModule, SETTINGS, USE_EMULATOR as USE_FIRESTORE_EMULATOR} from '@angular/fire/compat/firestore';
import { AngularFireModule } from '@angular/fire/compat';

@NgModule({
  declarations: [AppComponent],
  entryComponents: [],
  imports: [
    BrowserModule, 
    IonicModule.forRoot(),
    AngularFireModule.initializeApp(environment.firebase),
    AngularFirestoreModule
  ],
  providers: [
    { 
      provide: RouteReuseStrategy, 
      useClass: IonicRouteStrategy 
    },
    { 
      provide: USE_FIRESTORE_EMULATOR, 
      useValue: environment.emulator ? ['http://localhost:8080'] : undefined 
    },
    {
      provide: SETTINGS,
      useValue: { experimentalForceLongPolling: true, ssl: false, merge: true }
    }
  ],
  bootstrap: [AppComponent],
})
export class AppModule { }
import { AngularFirestore } from '@angular/fire/compat/firestore';

@Component({
  selector: 'app-root',
  templateUrl: 'app.component.html',
  styleUrls: ['app.component.scss'],
})
export class AppComponent {
  userName: User;

  constructor(
    private afs: AngularFirestore,
  ) { }

  ngOnInit(): void {
    this.afs
      .doc<User>(`users/1234`)
      .valueChanges().subscribe(data => {
        this.userName = data.data().name;
      });
  }
}

Sonra, aşağıdakiler emülatörle sorunsuz çalışıyor:

import { initializeApp, provideFirebaseApp } from '@angular/fire/app';
import { provideFirestore, getFirestore, connectFirestoreEmulator, enableIndexedDbPersistence} from '@angular/fire/firestore';

@NgModule({
  declarations: [AppComponent],
  entryComponents: [],
  imports: [
    BrowserModule, 
    IonicModule.forRoot(),
    provideFirebaseApp(() => initializeApp(environment.firebase)), 
    provideFirestore(() =>  {
      const firestore = getFirestore();
      connectFirestoreEmulator(firestore, 'localhost', 8080);
      enableIndexedDbPersistence(firestore);
      return firestore;
    })
  ],
  providers: [
    { 
      provide: RouteReuseStrategy, 
      useClass: IonicRouteStrategy 
    }
  ],
  bootstrap: [AppComponent],
})
export class AppModule { }
import { doc, docSnapshots, Firestore } from '@angular/fire/firestore';

@Component({
  selector: 'app-root',
  templateUrl: 'app.component.html',
  styleUrls: ['app.component.scss'],
})
export class AppComponent {
  userName: String;

  constructor(
    private afs: Firestore,
  ) { }

  ngOnInit(): void {
    let documetnRef = doc(this.afs, 'users/1234');
    docSnapshots(documetnRef).subscribe(data => {
      this.userName = data.data().name;
    })
  }
}

Gerekirse, bağımlılık sürümlerim:

  "dependencies": {
    "@angular/common": "~13.2.2",
    "@angular/core": "~13.2.2",
    "@angular/fire": "^7.3.0",
    "@angular/forms": "~13.2.2",
    "@angular/platform-browser": "~13.2.2",
    "@angular/platform-browser-dynamic": "~13.2.2",
    "@angular/router": "~13.2.2",
    "@ionic/angular": "^6.0.0",
    "rxjs": "~6.6.0",
    "tslib": "^2.2.0",
    "zone.js": "~0.11.4"
  },

Emülatör Firebase 9 uyumluluğunu desteklemiyor mu? Bununla ilgili bir dokümantasyonu kaçırdım mı?
Uygulamamı modüler kütüphaneleri kullanacak şekilde dönüştürmekten rahatsız değilim, sadece yavaş yavaş geçmek daha uygun olurdu.