Skip to content

HMR t v6.1.0 RC3: Firestore Emulators Error: Precondition failed #2655

Closed

Description

@Meistercoach83

Hey there! I have a problem with firebase / angularfire2 (latest rc) and the cloud emulators. If I add this
{ provide: USE_FIRESTORE_EMULATOR, useValue: environment.useEmulators ? ['localhost', 8080] : undefined },
to my app.module, the routing (with guards) is not working any longer with the error message "NavigationError(id: 2, url: '/setup', error: FirebaseError: [code=failed-precondition]: Firestore has already been started and its settings can no longer be changed. You can only modify settings before calling any other methods on a Firestore object.) platform-browser.js:66 " Can anyone help me with that?

Version info

Angular: 11.0.0
Firebase: 8.16.1
AngularFire: latest RC 6.1.0-rc.3
Other (e.g. Ionic/Cordova, Node, browser, operating system):
Angular CLI: 11.0.1
Node: 12.18.1
OS: win32 x64

Activity

  1. jornetsimon commented on Nov 16, 2020

    @jornetsimon

    I'm getting this too.
    AFAIK this bug was introduced in 6.1.0 RC3.
    The important missing piece is that it only happens with HMR enabled (ng serve --hmr).

    Stack trace indicates this has to do with redeclaring AngularFirestore :
    Screen Shot 2020-11-16 at 08 31 49

    You can reproduce by commenting any piece of code (except root styles) and let Webpack pick up the change.

    @Meistercoach83 Maybe you could rename the issue with a more precise description

  2. changed the title [-]Firestore Emulators Error[/-] [+]HMR t v6.1.0 RC3: Firestore Emulators Error: Precondition failed[/+] on Nov 16, 2020
  3. jamesdaniels commented on Nov 16, 2020

    @jamesdaniels
    Contributor

    hmr would make sense, as firebase has side effects and angularfire is for the most part side-effect free. e.g, AngularFirestore doesn't keep a global cache of it's instantiated instances. Instead when it's initialized it merrily tries to create and initialize a new firestore instance.

    There's two work arounds here IMO, A) keep a global cache for instantiated firestore instances B) inspect the settings/options on an instantiated instance & check that they match the passed in settings, else try to apply and error out if it fails. The benefit of B would be better guard rails incase someone tries to mess with DI to change firestore settings without creating a second app & you'd get a helpful error if you changed the DI with hmr on. I'll investigate that option today.

  4. jamesdaniels commented on Nov 17, 2020

    @jamesdaniels
    Contributor

    This should be resolved in 6.1.0.rc-4.

  5. jamesdaniels commented on Nov 17, 2020

    @jamesdaniels
    Contributor

    I added a globalThis cache of instantiated firebase SDK instances. It should ignore & warn if DI tokens change & will include an additional note if HMR is detected. Please report a new issue if you find any more problems with AngularFire and HMR, I've not had the chance to give it a spin.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions