Die Firebase Local Emulator Suite kann für verschiedene Prototyp- und Testumgebungen installiert und konfiguriert werden – von einmaligen Prototyping-Sitzungen bis hin zu Continuous-Integration-Workflows im Produktionsmaßstab.
Local Emulator Suite installieren
Bevor Sie die Emulator Suite installieren, benötigen Sie Folgendes:
So installieren Sie die Emulator Suite:
- Installieren Sie Firebase CLI.
Wenn Sie die Firebase CLI noch nicht installiert haben, holen Sie das jetzt nach.
Für die Verwendung der Emulator Suite benötigen Sie die CLI-Version 8.14.0 oder höher. Mit dem folgenden Befehl können Sie prüfen, welche Version Sie installiert haben:
firebase --version
- Wenn Sie es noch nicht getan haben, initialisieren Sie das aktuelle Arbeitsverzeichnis als Firebase-Projekt und folgen Sie der Anleitung auf dem Bildschirm, um anzugeben, welche Produkte verwendet werden sollen:
firebase init
- Richten Sie die Emulator Suite ein. Mit diesem Befehl wird ein Konfigurationsassistent gestartet, mit dem Sie Emulatoren auswählen, die entsprechenden binären Emulatordateien herunterladen und Emulatorports festlegen können, wenn die Standardwerte nicht geeignet sind.
firebase init emulators
Nach der Installation eines Emulators werden keine Updateprüfungen durchgeführt und keine zusätzlichen automatischen Downloads erfolgen, bis Sie Ihre Firebase CLI-Version aktualisieren.
Emulator Suite konfigurieren
Optional können Sie die Netzwerkports der Emulatoren und den Pfad zu den Definitionen der Sicherheitsregeln in der Datei firebase.json
konfigurieren:
- Sie können die Emulatorports ändern, indem Sie
firebase init emulators
ausführen oderfirebase.json
manuell bearbeiten. - Sie können den Pfad zu den Definitionen von Sicherheitsregeln ändern, indem Sie
firebase.json
manuell bearbeiten.
Wenn Sie diese Einstellungen nicht konfigurieren, werden die Emulatoren an ihren Standardports ausgeführt und die Emulatoren Cloud Firestore, Realtime Database und Cloud Storage for Firebase werden mit offener Datensicherheit ausgeführt.
Befehl | Beschreibung |
---|---|
Emulatoren initialisieren | Starten Sie den Assistenten zur Initialisierung des Emulators. Geben Sie die zu installierenden Emulatoren an und legen Sie optional die Emulatoren-Porteinstellungen fest. init emulators ist nicht destruktiv. Wenn Sie die Standardeinstellungen akzeptieren, bleibt die aktuelle Emulatorkonfiguration erhalten. |
Portkonfiguration
Jeder Emulator wird an einen anderen Port auf Ihrem Computer gebunden, wobei ein bevorzugter Standardwert verwendet wird.
Emulator | Standardport |
---|---|
Authentication | 9099 |
App Hosting | 5002 |
Emulator Suite UI | 4000 |
Cloud Functions | 5001 |
Eventarc | 9299 |
Realtime Database | 9000 |
Cloud Firestore | 8080 |
Cloud Storage for Firebase | 9199 |
Firebase Hosting | 5.000 |
Pub/Sub | 8085 |
Projekt-ID konfigurieren
Je nachdem, wie Sie Emulatoren aufrufen, können Sie mehrere Instanzen eines Emulators mit verschiedenen Firebase-Projekt-IDs oder mehrere Emulatorinstanzen für eine bestimmte Projekt-ID ausführen. In solchen Fällen werden Emulatorinstanzen in einer separaten Umgebung ausgeführt.
Im Allgemeinen empfiehlt es sich, für alle Emulatoraufrufe eine Projekt-ID festzulegen, damit Emulator Suite UI, verschiedene Produktemulatoren und alle laufenden Instanzen eines bestimmten Emulators in allen Fällen richtig kommunizieren können.
Local Emulator Suite gibt Warnungen aus, wenn mehrere Projekt-IDs in der Umgebung erkannt werden. Sie können dieses Verhalten jedoch überschreiben, indem Sie den Schlüssel singleProjectMode
in Ihrer firebase.json
auf false
setzen.
Sie können die Deklaration(en) der Projekt-ID auf Abweichungen prüfen in:
- Das Standardprojekt in der Befehlszeile: Standardmäßig wird die Projekt-ID beim Start aus dem Projekt übernommen, das mit
firebase init
oderfirebase use
ausgewählt wurde. Mitfirebase projects:list
können Sie die Liste der Projekte aufrufen und sehen, welches ausgewählt ist. - Regel-Unittests: Die Projekt-ID wird häufig in Aufrufen der Methoden
initializeTestEnvironment
oderinitializeTestApp
der Unittest-Bibliothek für Regeln angegeben. - Das Befehlszeilen-Flag
--project
Wenn Sie das Firebase-CLI-Flag--project
übergeben, wird das Standardprojekt überschrieben. Der Wert des Flags muss mit der Projekt-ID in Unit-Tests und bei der Initialisierung der App übereinstimmen.
Prüfen Sie auch die plattformspezifischen Projekt-ID-Konfigurationen, die Sie beim Konfigurieren Ihrer Apple-Plattformen-, Android- und Web-Projekte festgelegt haben.
Sicherheitsregeln konfigurieren
Die Emulatoren übernehmen die Konfiguration der Sicherheitsregeln aus den Konfigurationsschlüsseln 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": {
"singleProjectMode": false, // do not warn on detection of multiple project IDs
"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"
}
}
}
Java-Optionen angeben
Der Realtime Database-Emulator, der Cloud Firestore-Emulator und ein Teil des Cloud Storage for Firebase-Emulators basieren auf Java, das mit JVM-Flags über die Umgebungsvariable JAVA_TOOL_OPTIONS
angepasst werden kann.
Wenn beispielsweise Fehler im Zusammenhang mit dem Java-Heap-Speicher auftreten, können Sie die maximale Java-Heap-Größe auf 4 GB erhöhen:
export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start
Mehrere Flags können in Anführungszeichen durch Leerzeichen getrennt angegeben werden, z. B. JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g"
. Die Flags wirken sich nur auf die Java-basierten Komponenten der Emulatoren aus und haben keine Auswirkungen auf andere Teile der Firebase-Befehlszeile, z. B. Emulator Suite UI.
Emulatoren starten
Sie können Emulatoren so starten, dass sie bis zur manuellen Beendigung ausgeführt werden, oder für die Dauer eines bestimmten Testskripts und dann automatisch heruntergefahren werden.
Befehl | Beschreibung | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
emulators:start | Startet Emulatoren für die in firebase.json konfigurierten Firebase-Produkte.
Emulatorprozesse werden so lange ausgeführt, bis sie explizit beendet werden. Beim Aufrufen von
emulators:start werden die Emulatoren in ~/.cache/firebase/emulators/ heruntergeladen, falls sie noch nicht installiert sind.
|
||||||||||||||
emulators:exec scriptpath | Führen Sie das Skript unter scriptpath aus, nachdem Sie Emulatoren für die in firebase.json konfigurierten Firebase-Produkte gestartet haben. Emulatorprozesse werden automatisch beendet, wenn das Skript ausgeführt wurde.
|
Die Methode firebase emulators:exec
ist im Allgemeinen besser für Continuous Integration-Workflows geeignet.
Emulatordaten exportieren und importieren
Sie können Daten aus den Emulatoren Authentication, Cloud Firestore, Realtime Database und Cloud Storage for Firebase exportieren, um sie als gemeinsam nutzbaren, gemeinsamen Baseline-Datensatz zu verwenden. Diese Datasets können wie oben beschrieben mit dem Flag --import
importiert werden.
emulators:export export_directory |
Authentication-, Cloud Firestore-, Realtime Database- oder Cloud Storage for Firebase-Emulator.
Daten aus einer laufenden Emulatorinstanz für Cloud Firestore, Realtime Database oder Cloud Storage for Firebase exportieren. Die angegebene
Sie können die Emulatoren anweisen, Daten beim Herunterfahren automatisch zu exportieren. Verwenden Sie dazu die oben beschriebenen |
In CI-System einbinden
Containerisierte Emulator Suite-Images ausführen
Die Installation und Konfiguration der Emulator Suite mit Containern in einer typischen CI-Einrichtung ist unkompliziert.
Dabei sind einige Punkte zu beachten:
JAR-Dateien werden unter
~/.cache/firebase/emulators/
installiert und im Cache gespeichert.- Möglicherweise möchten Sie diesen Pfad Ihrer CI-Cachekonfiguration hinzufügen, um wiederholte Downloads zu vermeiden.
Wenn Sie keine
firebase.json
-Datei in Ihrem Repository haben, müssen Sie dem Befehlemulators:start
oderemulators:exec
ein Befehlszeilenargument hinzufügen, um anzugeben, welche Emulatoren gestartet werden sollen. Beispiel:--only functions,firestore
.
Authentifizierungstoken generieren (nur Hosting-Emulator)
Wenn Ihre Continuous Integration-Workflows auf Firebase Hosting basieren, müssen Sie sich mit einem Token anmelden, um firebase emulators:exec
auszuführen. Für die anderen Emulatoren ist keine Anmeldung erforderlich.
Führen Sie firebase login:ci
in Ihrer lokalen Umgebung aus, um ein Token zu generieren. Dies sollte nicht über ein CI-System erfolgen. Folgen Sie der Anleitung zur Authentifizierung. Sie müssen diesen Schritt nur einmal pro Projekt ausführen, da das Token für alle Builds gültig ist. Das Token sollte wie ein Passwort behandelt und geheim gehalten werden.
Wenn Sie in Ihrer CI-Umgebung Umgebungsvariablen angeben können, die in den Build-Skripten verwendet werden können, erstellen Sie einfach eine Umgebungsvariable namens FIREBASE_TOKEN
mit dem Wert des Zugriffstoken-Strings. Die Firebase-Befehlszeile übernimmt automatisch die Umgebungsvariable FIREBASE_TOKEN
und die Emulatoren werden ordnungsgemäß gestartet.
Als letzten Ausweg können Sie das Token einfach in Ihr Build-Skript einfügen. Achten Sie jedoch darauf, dass nicht vertrauenswürdige Parteien keinen Zugriff haben. Bei diesem hartcodierten Ansatz können Sie dem Befehl firebase emulators:exec
--token "YOUR_TOKEN_STRING_HERE"
hinzufügen.
Emulator Hub REST API verwenden
Laufende Emulatoren auflisten
Wenn Sie die aktuell ausgeführten Emulatoren auflisten möchten, senden Sie eine GET
-Anfrage an den /emulators
-Endpunkt des Emulator Hub.
curl localhost:4400/emulators
Das Ergebnis ist ein JSON-Objekt, in dem alle laufenden Emulatoren und ihre Host-/Port-Konfiguration aufgeführt sind, z. B.:
{
"hub":{
"name": "hub",
"host": "localhost",
"port": 4400
},
"functions": {
"name": "functions",
"host": "localhost",
"port": 5001
}
"firestore": {
"name": "firestore",
"host": "localhost",
"port": 8080
}
}
Hintergrundfunktions-Trigger aktivieren / deaktivieren
In einigen Fällen müssen Sie lokale Funktions- und Erweiterungstrigger vorübergehend deaktivieren. Möglicherweise möchten Sie beispielsweise alle Daten im Cloud Firestore-Emulator löschen, ohne onDelete
-Funktionen auszulösen, die im Cloud Functions- oder Extensions-Emulator ausgeführt werden.
Wenn Sie lokale Funktions-Trigger vorübergehend deaktivieren möchten, senden Sie eine PUT
-Anfrage an den /functions/disableBackgroundTriggers
-Endpunkt des Emulator Hub.
curl -X PUT localhost:4400/functions/disableBackgroundTriggers
Das Ergebnis ist ein JSON-Objekt, das den aktuellen Status enthält.
{
"enabled": false
}
Wenn Sie lokale Funktionsauslöser aktivieren möchten, 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 enthält.
{
"enabled": true
}
Emulator-SDK-Integrationen
In den Tabellen in diesem Abschnitt wird angegeben, welche Emulatoren von Client- und Admin-SDKs unterstützt werden. Zukünftig bedeutet, dass die Unterstützung von Emulatoren geplant, aber noch nicht verfügbar ist.
Verfügbarkeit von Client-SDKs
Android | Apple-Plattformen | Web |
Firebase UI Android |
Firebase UI iOS |
Firebase UI Web |
|
---|---|---|---|---|---|---|
Realtime Database | 19.4.0 | 7.2.0 | 8.0.0 | 6.4.0 | Zukünftig | – |
Cloud Firestore | 21.6.0 | 7.2.0 | 8.0.0 | 6.4.0 | Zukünftig | – |
Authentication | 20.0.0 | 7.0.0 | 8.0.0 | 7.0.0 | Zukünftig | 4.7.2 |
Cloud Storage for Firebase | 20.0.0 | 8.0.0 | 8.4.0 | 7.0.0 | 11.0.0 | – |
Cloud Functions | 19.1.0 | 7.2.0 | 8.0.0 | – | – | – |
Hosting | – | – | – | – | – | – |
Extensions | – | – | – | – | – | – |
Verfügbarkeit des Admin SDK
Knoten | Java | Python | Go | |
---|---|---|---|---|
Realtime Database | 8.6.0 | 6.10.0 | 2.18.0 | Zukünftig |
Cloud Firestore | 8.0.0 | 6.10.0 | 3.0.0 | 1.0.0 |
Authentication | 9.3.0 | 7.2.0 | 5.0.0 | 4.2.0 |
Cloud Storage for Firebase | 9.8.0 | Zukünftig | Zukünftig | Zukünftig |
Cloud Functions | – | – | – | – |
Hosting | – | – | – | – |
Extensions | – | – | – | – |