Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Installieren, konfigurieren und integrieren Sie die Local Emulator Suite

Die Firebase Local Emulator Suite kann für verschiedene Prototypen- und Testumgebungen installiert und konfiguriert werden, von einmaligen Prototyping-Sitzungen bis hin zu kontinuierlichen Integrationsworkflows im Produktionsmaßstab.

Installieren Sie die Local Emulator Suite

Vor der Installation der Emulator Suite benötigen Sie:

  • Node.js Version 8.0 oder höher.
  • Java - Version 1.8 oder höher.

So installieren Sie die Emulator Suite:

  1. Installieren Sie die Firebase CLI . Wenn Sie nicht bereits installiert die Firebase CLI haben, installieren Sie es jetzt . Sie benötigen CLI-Version 8.14.0 oder höher, um die Emulator Suite verwenden zu können. Sie können Sie installiert haben , welche Version überprüfen Sie den folgenden Befehl:
    firebase --version
  2. Wenn Sie dies noch nicht getan haben, initialisieren Sie das aktuelle Arbeitsverzeichnis als Firebase - Projekt, nach den Anweisungen auf dem Bildschirm , welche Produkte zu verwenden , um anzugeben:
    firebase init
  3. Richten Sie die Emulator-Suite ein. Dieser Befehl startet einen Konfigurationsassistenten, mit dem Sie interessierende Emulatoren auswählen, die entsprechenden Binärdateien des Emulators herunterladen und Emulatorports festlegen können, wenn die Standardeinstellungen nicht angemessen sind.
    firebase init emulators

Sobald ein Emulator installiert ist, werden keine Aktualisierungsprüfungen durchgeführt und es werden keine zusätzlichen automatischen Downloads durchgeführt, bis Sie Ihre Firebase-CLI-Version aktualisieren.

Emulator Suite konfigurieren

Sie können optional auch die Emulatoren Netzwerk - Ports und den Pfad zu Sicherheitsregeln Definitionen in der Konfiguration firebase.json Datei:

  • Ändern Emulator - Ports , indem Sie firebase init emulators oder bearbeite firebase.json manuell.
  • Ändern Sie den Pfad zu den Sicherheitsregeln Definitionen und bearbeite firebase.json manuell.

Wenn Sie diese Einstellungen nicht konfigurieren, überwachen die Emulatoren ihre Standardports und die Emulatoren von Cloud Firestore, Realtime Database und Cloud Storage werden mit offener Datensicherheit ausgeführt.

Befehl Beschreibung
init-Emulatoren Starten Sie einen Emulator-Initialisierungsassistenten. Identifizieren Sie die zu installierenden Emulatoren und geben Sie optional die Emulator-Port-Einstellungen an. init emulators ist zerstörungsfrei ; Wenn Sie die Standardeinstellungen akzeptieren, wird die aktuelle Emulatorkonfiguration beibehalten.

Portkonfiguration

Jeder Emulator bindet an einen anderen Port auf Ihrem Computer mit einem bevorzugten Standardwert.

Emulator Standard-Port
Authentifizierung 9099
Emulator Suite-Benutzeroberfläche 4000
Cloud-Funktionen 5001
Echtzeit-Datenbank 9000
Cloud Firestore 8080
Cloud-Speicher 9199
Firebase-Hosting 5000
Pub/Sub 8085

Konfiguration der Sicherheitsregeln

Die Emulatoren nehmen Sicherheitsregeln Konfiguration der database , firestore und storage in firebase.json .

{
  // Existing firebase configuration ...
  "database": {
    "rules": "database.rules.json"
  },
  "firestore" {
    "rules": "firestore.rules"
  },
  "storage" {
    "rules": "storage.rules"
  }

  // ...

  // Optional emulator configuration. Default
  // values are used if absent.
  "emulators": {
    "firestore": {
      "port": "8080"
    },
    "ui": {
      "enabled": true,      // Default is `true`
      "port": 4000          // If unspecified, see CLI log for selected port
    },
    "auth": {
      "port": "9099"
    },
    "pubsub": {
      "port": "8085"
    }
  }
}

Emulatoren starten

Sie können Emulatoren so starten, dass sie bis zum manuellen Beenden oder für die Dauer eines festgelegten Testskripts ausgeführt werden und dann automatisch heruntergefahren werden.

Befehl Beschreibung
Emulatoren:starten Start - Emulatoren für die Firebase Produkte konfiguriert firebase.json . Emulatorprozesse laufen weiter, bis sie explizit gestoppt werden. Der Aufruf emulators:start wird laden Sie die Emulatoren ~ / .cache / Firebase / Emulatoren / wenn sie nicht bereits installiert sind.
Flagge Beschreibung
--only Optional. Beschränken Sie, welche Emulatoren gestartet werden. Geben Sie eine durch Kommas getrennte Liste von Emulatornamen an und geben Sie einen oder mehrere von 'auth', 'database', 'firestore', 'functions', 'hosting' oder 'pubsub' an.
--inspect-functions debug_port Optional. Mit dem Cloud Functions-Emulator verwenden, um das Breakpoint-Debugging von Funktionen am angegebenen Port (oder am Standardport 9229, wenn das Argument weggelassen wird) zu aktivieren. Beachten Sie, dass der Cloud Functions-Emulator bei Angabe dieses Flags in einen speziellen serialisierten Ausführungsmodus wechselt, in dem Funktionen in einem einzigen Prozess in sequentieller (FIFO) Reihenfolge ausgeführt werden; Dies vereinfacht das Debugging von Funktionen, obwohl sich das Verhalten von der parallelen Ausführung von Funktionen in der Cloud mit mehreren Prozessen unterscheidet.
--export-on-exit= Optional. Zur Verwendung mit dem Authentifizierungs-, Cloud Firestore-, Realtime Database- oder Cloud Storage-Emulator. Anweisen , den Emulator (en) auf Export von Daten in ein Verzeichnis beim Abschalten auftritt, wie für den beschriebenen emulators:export Das Exportverzeichnis kann mit diesem Flag angegeben werden: firebase emulators:start --export-on-exit=./saved-data . Wenn --import verwendet wird, Versäumnisse der Exportpfad zu derselben; Zum Beispiel: firebase emulators:start --import=./data-path --export-on-exit . Schließlich, wenn gewünscht, passieren verschiedene Verzeichnispfade zum --import und --export-on-exit - Flags.
--import= import_directory Optional. Verwendung mit Authentifizierung, Cloud Firestore, Realtime Database oder Cloud Storage-Emulator. Importieren von Daten gespeichert unter Verwendung der --export-on-exit Startoption oder die emulators:export - Befehls an eine laufenden Authentifizierung, Wolke Firestor, Echtzeit - Datenbank oder Cloud Storage - Emulator - Instanz. Alle Daten, die sich derzeit im Emulatorspeicher befinden, werden überschrieben.
Emulatoren: exec scriptpath Führen Sie das Skript an scriptpath nach Emulatoren für die Firebase Produkte konfiguriert Start firebase.json . Emulatorprozesse werden automatisch gestoppt, wenn das Skript ausgeführt wurde.
Flagge Beschreibung
--only Optional. Beschränken Sie, welche Emulatoren gestartet werden. Geben Sie eine durch Kommas getrennte Liste von Emulatornamen an und geben Sie einen oder mehrere von 'firestore', 'database', 'functions', 'hosting' oder 'pubsub' an.
--inspect-functions debug_port Optional. Mit dem Cloud Functions-Emulator verwenden, um das Breakpoint-Debugging von Funktionen am angegebenen Port (oder am Standardport 9229, wenn das Argument weggelassen wird) zu aktivieren. Beachten Sie, dass der Cloud Functions-Emulator bei Angabe dieses Flags in einen speziellen serialisierten Ausführungsmodus wechselt, in dem Funktionen in einem einzigen Prozess in sequentieller (FIFO) Reihenfolge ausgeführt werden; Dies vereinfacht das Debugging von Funktionen, obwohl sich das Verhalten von der parallelen Ausführung von Funktionen in der Cloud mit mehreren Prozessen unterscheidet.
--export-on-exit= Optional. Zur Verwendung mit dem Authentifizierungs-, Cloud Firestore-, Realtime Database- oder Cloud Storage-Emulator. Anweisen , den Emulator (en) auf Export von Daten in ein Verzeichnis beim Abschalten auftritt, wie für den beschriebenen emulators:export Das Exportverzeichnis kann mit diesem Flag angegeben werden: firebase emulators:start --export-on-exit=./saved-data . Wenn --import verwendet wird, Versäumnisse der Exportpfad zu derselben; Zum Beispiel: firebase emulators:start --import=./data-path --export-on-exit . Schließlich, wenn gewünscht, passieren verschiedene Verzeichnispfade zum --import und --export-on-exit - Flags.
--import= import_directory Optional. Zur Verwendung mit dem Authentifizierungs-, Cloud Firestore-, Realtime Database- oder Cloud Storage-Emulator. Importieren von Daten gespeichert unter Verwendung der --export-on-exit Startoption oder die emulators:export - Befehls an eine laufenden Authentifizierung, Wolke Firestor, Echtzeit - Datenbank oder Cloud Storage - Emulator - Instanz. Alle Daten, die sich derzeit im Emulatorspeicher befinden, werden überschrieben.
--ui Optional. Führen Sie die Emulator-Benutzeroberfläche während der Ausführung aus.

Die firebase emulators:exec - Methode ist in der Regel besser geeignet für die kontinuierliche Integration Workflows.

Emulatordaten exportieren und importieren

Sie können Daten aus den Authentifizierungs-, Cloud Firestore-, Realtime Database- und Cloud Storage-Emulatoren exportieren, um sie als gemeinsam nutzbares, gemeinsames Baseline-Dataset zu verwenden. Diese Datensätze können eingeführt werden , um die Verwendung von --import Flag, wie oben beschrieben.

Emulatoren: export export_directory

Authentifizierung, Wolke Firestor, Echtzeit - Datenbank oder Cloud Storage - Emulator. Exportieren Sie Daten aus einer laufenden Cloud Firestore-, Realtime Database- oder Cloud Storage-Emulatorinstanz. Die angegebene export_directory wird erstellt, wenn es nicht bereits vorhanden ist . Wenn das angegebene Verzeichnis existiert, werden Sie aufgefordert zu bestätigen, dass die vorherigen Exportdaten überschrieben werden sollen. Sie können diese Aufforderung mit der --force Flagge überspringen. Das Exportverzeichnis enthält eine Daten - Manifest - Datei, firebase-export-metadata.json .

Sie können die Emulatoren Exportdaten automatisch anweisen , wenn sie Abschaltung die Verwendung --export-on-exit - Flags beschrieben.

Integration in Ihr CI-System

Containerisierte Emulator Suite-Images ausführen

Die Installation und Konfiguration der Emulator Suite mit Containern in einem typischen CI-Setup ist unkompliziert.

Es sind einige Probleme zu beachten:

  • JAR - Dateien werden bei installiert und zwischengespeichert ~/.cache/firebase/emulators/ .

    • Sie können diesen Pfad zu Ihrer CI-Cache-Konfiguration hinzufügen, um wiederholte Downloads zu vermeiden.
  • Wenn Sie keine haben firebase.json Datei in Ihrem Repository, müssen Sie ein Befehlszeilenargument der Add - emulators:start oder emulators:exec Befehl zu spezifizieren , die Emulatoren gestartet werden sollen. Zum Beispiel,
    --only functions,firestore .

Authentifizierungstoken generieren (nur Hosting-Emulator)

Wenn Ihre kontinuierliche Integration Workflows verlassen Firebase Hosting, dann müssen Sie sich einloggen einen Token , um mit laufen firebase emulators:exec . Die anderen Emulatoren erfordern keine Anmeldung.

Ein Token, führen zu generieren firebase login:ci auf Ihrer lokalen Umgebung; dies sollte nicht von einem CI-System aus durchgeführt werden. Folgen Sie den Anweisungen zur Authentifizierung. Sie sollten diesen Schritt nur einmal pro Projekt ausführen müssen, da das Token Buildübergreifend gültig ist. Das Token sollte wie ein Passwort behandelt werden; stellen Sie sicher, dass es geheim gehalten wird.

Wenn Ihr CI - Umgebung können Sie Umgebungsvariablen angeben , die in den Build - Skripte verwendet werden kann, einfach eine Umgebungsvariable erstellen genannt FIREBASE_TOKEN , wobei der Wert der Zugriffstoken String sein. Die Firebase CLI abholt automatisch die FIREBASE_TOKEN Umgebungsvariable und die Emulatoren richtig beginnen.

Als letzten Ausweg können Sie das Token einfach in Ihr Build-Skript aufnehmen, aber stellen Sie sicher, dass nicht vertrauenswürdige Parteien keinen Zugriff haben. Aus diesem hartcodierte Ansatz, können Sie hinzufügen --token "YOUR_TOKEN_STRING_HERE" auf die firebase emulators:exec Befehl.

Verwenden Sie die Emulator Hub-REST-API

Laufende Emulatoren auflisten

Um die aktuell laufenden Emulatoren Liste, eine senden GET - Anforderung an den /emulators Endpunkt des Emulator Hub.

curl localhost:4400/emulators

Das Ergebnis ist ein JSON-Objekt, das alle laufenden Emulatoren und ihre Host-/Port-Konfiguration auflistet, zum Beispiel:

{
  "hub":{
    "name": "hub",
    "host": "localhost",
    "port": 4400
  },
  "functions": {
    "name": "functions",
    "host": "localhost",
    "port": 5001
  }
  "firestore": {
    "name": "firestore",
    "host": "localhost",
    "port": 8080
  }
}

Aktivieren / Deaktivieren von Hintergrundfunktionstriggern

In einigen Situationen müssen Sie lokale Funktionstrigger vorübergehend deaktivieren. Zum Beispiel können Sie alle Daten in dem Cloud Firestore - Emulator zu löschen , ohne Auslösung onDelete Funktionen , die in der Cloud - Funktionen Emulator ausgeführt werden .

So deaktivieren Sie vorübergehend lokale Funktion Trigger, ein senden PUT Anfrage an die /functions/disableBackgroundTriggers Endpunkt der Emulator Hub.

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

Das Ergebnis ist ein JSON-Objekt, das den aktuellen Status detailliert beschreibt.

{
  "enabled": false
}

So aktivieren Sie lokale Funktion Auslöser , nachdem sie deaktiviert wurden, senden Sie eine PUT Anfrage an den /functions/enableBackgroundTriggers Endpunkt des Emulator Hub.

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

Das Ergebnis ist ein JSON-Objekt, das den aktuellen Status detailliert beschreibt.

{
  "enabled": true
}

Emulator-SDK-Integrationen

Die Tabellen in diesem Abschnitt geben an, welche Emulatoren von Client- und Admin-SDKs unterstützt werden. Künftige Mittel Emulator Unterstützung ist geplant , aber noch nicht verfügbar.

Verfügbarkeit des Client-SDK

Android iOS Netz Firebase-Benutzeroberfläche
Android
Firebase-Benutzeroberfläche
iOS
Firebase-Benutzeroberfläche
Netz
Echtzeit-Datenbank 19.4.0 7.2.0 8.0.0 6.4.0 Zukunft N / A
Cloud Firestore 21.6.0 7.2.0 8.0.0 6.4.0 Zukunft N / A
Authentifizierung 20.0.0 7.0.0 8.0.0 7.0.0 Zukunft Zukunft
Cloud-Speicher 20.0.0 8.0.0 8.4.0 N / A N / A N / A
Cloud-Funktionen 19.1.0 7.2.0 8.0.0 N / A N / A N / A
Hosting N / A N / A N / A N / A N / A N / A

Verfügbarkeit des Admin-SDK

Knoten Java Python gehen
Echtzeit-Datenbank 8.6.0 6.10.0 2.18.0 Zukunft
Cloud Firestore 8.0.0 6.10.0 3.0.0 1.0.0
Authentifizierung 9.3.0 Zukunft Zukunft Zukunft
Cloud-Speicher 9.8.0 Zukunft Zukunft Zukunft
Cloud-Funktionen N / A N / A N / A N / A
Hosting N / A N / A N / A N / A