Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Zainstaluj, skonfiguruj i zintegruj pakiet lokalnych emulatorów

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Pakiet Firebase Local Emulator Suite można zainstalować i skonfigurować dla różnych środowisk prototypowych i testowych, od jednorazowych sesji prototypowania po przepływy pracy ciągłej integracji na skalę produkcyjną.

Zainstaluj pakiet lokalnych emulatorów

Przed zainstalowaniem pakietu emulatorów będziesz potrzebować:

  • Node.js w wersji 8.0 lub nowszej.
  • Java JDK w wersji 11 lub nowszej.

Aby zainstalować pakiet emulatorów:

  1. Zainstaluj interfejs wiersza polecenia Firebase . Jeśli nie masz jeszcze zainstalowanego interfejsu wiersza polecenia Firebase, zainstaluj go teraz . Do korzystania z pakietu Emulator potrzebny jest CLI w wersji 8.14.0 lub nowszej. Możesz sprawdzić, którą wersję zainstalowałeś za pomocą następującego polecenia:
    firebase --version
  2. Jeśli jeszcze tego nie zrobiłeś, zainicjuj bieżący katalog roboczy jako projekt Firebase, postępując zgodnie z instrukcjami wyświetlanymi na ekranie, aby określić, których produktów użyć:
    firebase init
  3. Skonfiguruj pakiet emulatorów. To polecenie uruchamia kreatora konfiguracji, który pozwala wybrać interesujące emulatory, pobrać odpowiednie pliki binarne emulatora i ustawić porty emulatora, jeśli wartości domyślne nie są odpowiednie.
    firebase init emulators

Po zainstalowaniu emulatora nie są wykonywane żadne testy aktualizacji i żadne dodatkowe automatyczne pobieranie nie będzie wykonywane, dopóki nie zaktualizujesz wersji Firebase CLI.

Skonfiguruj pakiet emulatorów

Opcjonalnie możesz skonfigurować porty sieciowe emulatorów i ścieżkę do definicji reguł zabezpieczeń w pliku firebase.json :

  • Zmień porty emulatora, uruchamiając firebase init emulators lub ręcznie edytując firebase.json .
  • Zmień ścieżkę do definicji reguł zabezpieczeń, edytując ręcznie firebase.json .

Jeśli nie skonfigurujesz tych ustawień, emulatory będą nasłuchiwać na swoich domyślnych portach, a emulatory Cloud Firestore, Baza danych czasu rzeczywistego i Cloud Storage for Firebase będą działać z zabezpieczeniami otwartych danych.

Komenda Opis
emulatory startowe Uruchom kreatora inicjalizacji emulatora. Zidentyfikuj emulatory do zainstalowania i opcjonalnie określ ustawienia portu emulatora. init emulators są nieniszczące; zaakceptowanie ustawień domyślnych zachowa bieżącą konfigurację emulatora.

Konfiguracja portu

Każdy emulator wiąże się z innym portem na komputerze z preferowaną wartością domyślną.

Emulator Port domyślny
Uwierzytelnianie 9099
Interfejs pakietu emulatorów 4000
Funkcje chmury 5001
Eventarc 9299
Baza danych czasu rzeczywistego 9000
Cloud Firestore 8080
Cloud Storage dla Firebase 9199
Hosting Firebase 5000
Pub/Sub 8085

Konfiguracja identyfikatora projektu

W zależności od sposobu wywoływania emulatorów możesz uruchomić wiele wystąpień emulatora przy użyciu różnych identyfikatorów projektów Firebase lub wiele wystąpień emulatora dla danego identyfikatora projektu. W takich przypadkach instancje emulatora działają w osobnym środowisku.

Ogólnie dobrą praktyką jest ustawienie jednego identyfikatora projektu dla wszystkich wywołań emulatora, dzięki czemu interfejs użytkownika pakietu emulatorów, różne emulatory produktów i wszystkie uruchomione wystąpienia określonego emulatora mogą komunikować się poprawnie we wszystkich przypadkach.

Pakiet emulatorów lokalnych wyświetla ostrzeżenia, gdy wykryje wiele identyfikatorów projektów w środowisku, ale można zastąpić to zachowanie, ustawiając klucz singleProjectMode na false w pliku firebase.json .

Możesz sprawdzić deklaracje identyfikatora projektu pod kątem niezgodności w:

  • Domyślny projekt w linii poleceń. Domyślnie identyfikator projektu zostanie pobrany podczas uruchamiania z projektu wybranego za pomocą funkcji firebase init lub firebase use . Aby wyświetlić listę projektów (i zobaczyć, który z nich jest wybrany), użyj firebase projects:list .
  • Testy jednostkowe reguł. Identyfikator projektu jest często określany w wywołaniach metod biblioteki Rules Unit Testing initializeTestEnvironment lub initializeTestApp .
  • Wiersz --project flaga projektu. Przekazanie flagi Firebase CLI --project zastąpienie domyślnego projektu. Musisz upewnić się, że wartość flagi jest zgodna z identyfikatorem projektu w testach jednostkowych i inicjowaniu aplikacji.

Sprawdź też konfiguracje identyfikatorów projektów dla poszczególnych platform, które zostały ustawione podczas konfigurowania platform Apple , Androida i projektów internetowych .

Konfiguracja reguł bezpieczeństwa

Emulatory przyjmą konfigurację reguł bezpieczeństwa z database , firestore i kluczy konfiguracji storage w 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"
    }
  }
}

Określanie opcji Java

Emulator bazy danych czasu rzeczywistego, emulator Cloud Firestore i część emulatora Cloud Storage for Firebase są oparte na języku Java, który można dostosować za pomocą flag maszyny JVM za pomocą zmiennej środowiskowej JAVA_TOOL_OPTIONS .

Na przykład, jeśli wystąpią błędy związane z przestrzenią sterty Java, można zwiększyć maksymalny rozmiar sterty Java do 4 GB:

export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start

Wiele flag można określić w cudzysłowie oddzielonych spacjami, np. JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g" . Flagi dotyczą tylko komponentów emulatorów opartych na języku Java i nie mają wpływu na inne części interfejsu wiersza polecenia Firebase, takie jak interfejs użytkownika pakietu emulatorów.

Uruchom emulatory

Emulatory można uruchomić, aby działały do ​​momentu ręcznego zakończenia lub działały na czas trwania wyznaczonego skryptu testowego, a następnie automatycznie się zamknęły.

Komenda Opis
emulatory:start Uruchom emulatory produktów Firebase skonfigurowane w firebase.json . Procesy emulatora będą nadal działać, dopóki nie zostaną jawnie zatrzymane. Wywołanie emulators:start spowoduje pobranie emulatorów do ~/.cache/firebase/emulators/, jeśli nie są jeszcze zainstalowane.
Flaga Opis
--only Opcjonalny. Ogranicz uruchamianie emulatorów. Podaj rozdzieloną przecinkami listę nazw emulatorów, określając jedną lub więcej spośród „auth”, „database”, „firestore”, „functions”, „hosting” lub „pubsub”.
--inspect-functions debug_port Opcjonalny. Użyj z emulatorem Cloud Functions, aby włączyć debugowanie punktów przerwania funkcji na określonym porcie (lub domyślnym porcie 9229, jeśli pominięto argument). Należy zauważyć, że po podaniu tej flagi emulator Cloud Functions przełącza się na specjalny tryb wykonywania serializacji, w którym funkcje są wykonywane w jednym procesie, w kolejności sekwencyjnej (FIFO); upraszcza to debugowanie funkcji, chociaż zachowanie różni się od wieloprocesowego, równoległego wykonywania funkcji w chmurze.
--export-on-exit= Opcjonalny. Używaj z emulatorem Uwierzytelniania, Cloud Firestore, Bazy danych czasu rzeczywistego lub Cloud Storage dla Firebase. Poinstruuj emulatory, aby wyeksportowały dane do katalogu po wystąpieniu zamknięcia, zgodnie z opisem dla polecenia emulators:export . Katalog eksportu można określić za pomocą tej flagi: firebase emulators:start --export-on-exit=./saved-data . Jeśli użyto opcji --import , ścieżka eksportu jest domyślnie taka sama; na przykład: firebase emulators:start --import=./data-path --export-on-exit . Na koniec, jeśli chcesz, przekaż różne ścieżki katalogów do flag --import i --export-on-exit .
--import= import_directory Opcjonalny. Używaj z emulatorem Uwierzytelniania, Cloud Firestore, Bazy danych czasu rzeczywistego lub Cloud Storage dla Firebase. Importuj dane zapisane przy użyciu opcji uruchamiania --export-on-exit lub polecenia emulators:export do działającej instancji uwierzytelniania, Cloud Firestore, Bazy danych czasu rzeczywistego lub Cloud Storage dla instancji emulatora Firebase. Wszelkie dane znajdujące się obecnie w pamięci emulatora zostaną nadpisane.
emulatory: scriptpath exec Uruchom skrypt w ścieżce skryptu po uruchomieniu emulatorów produktów scriptpath skonfigurowanych w firebase.json . Procesy emulatora zostaną automatycznie zatrzymane po zakończeniu działania skryptu.
Flaga Opis
--only Opcjonalny. Ogranicz uruchamianie emulatorów. Podaj rozdzieloną przecinkami listę nazw emulatorów, określając jedną lub więcej z „firestore”, „baza danych”, „funkcje”, „hosting” lub „pubsub”.
--inspect-functions debug_port Opcjonalny. Użyj z emulatorem Cloud Functions, aby włączyć debugowanie punktów przerwania funkcji na określonym porcie (lub domyślnym porcie 9229, jeśli pominięto argument). Należy zauważyć, że po podaniu tej flagi emulator Cloud Functions przełącza się na specjalny tryb wykonywania serializacji, w którym funkcje są wykonywane w jednym procesie, w kolejności sekwencyjnej (FIFO); upraszcza to debugowanie funkcji, chociaż zachowanie różni się od wieloprocesowego, równoległego wykonywania funkcji w chmurze.
--export-on-exit= Opcjonalny. Używaj z emulatorem Uwierzytelniania, Cloud Firestore, Bazy danych czasu rzeczywistego lub Cloud Storage dla Firebase. Poinstruuj emulatory, aby wyeksportowały dane do katalogu po wystąpieniu zamknięcia, zgodnie z opisem dla polecenia emulators:export . Katalog eksportu można określić za pomocą tej flagi: firebase emulators:start --export-on-exit=./saved-data . Jeśli użyto opcji --import , ścieżka eksportu jest domyślnie taka sama; na przykład: firebase emulators:start --import=./data-path --export-on-exit . Na koniec, jeśli chcesz, przekaż różne ścieżki katalogów do flag --import i --export-on-exit .
--import= import_directory Opcjonalny. Używaj z emulatorem Uwierzytelniania, Cloud Firestore, Bazy danych czasu rzeczywistego lub Cloud Storage dla Firebase. Importuj dane zapisane przy użyciu opcji uruchamiania --export-on-exit lub polecenia emulators:export do działającej instancji uwierzytelniania, Cloud Firestore, Bazy danych czasu rzeczywistego lub Cloud Storage dla instancji emulatora Firebase. Wszelkie dane znajdujące się aktualnie w pamięci emulatora zostaną nadpisane.
--ui Opcjonalny. Uruchom interfejs użytkownika emulatora podczas wykonywania.

Metoda firebase emulators:exec jest ogólnie bardziej odpowiednia w przypadku przepływów pracy ciągłej integracji.

Eksportuj i importuj dane emulatora

Możesz eksportować dane z emulatorów Uwierzytelniania, Cloud Firestore, Bazy danych czasu rzeczywistego i Cloud Storage dla Firebase, aby używać ich jako wspólnego zestawu danych podstawowych do udostępniania. Te zestawy danych można importować za pomocą flagi --import , jak opisano powyżej.

emulatory:eksportuj export_directory

Uwierzytelnianie, Cloud Firestore, Baza danych czasu rzeczywistego lub Cloud Storage dla emulatora Firebase . Eksportuj dane z działającej instancji Cloud Firestore, Bazy danych czasu rzeczywistego lub Cloud Storage dla instancji emulatora Firebase. Określony export_directory zostanie utworzony, jeśli jeszcze nie istnieje. Jeśli określony katalog istnieje, zostaniesz poproszony o potwierdzenie, że poprzednie dane eksportu powinny zostać nadpisane. Możesz pominąć ten monit za pomocą flagi --force . Katalog eksportu zawiera plik manifestu danych, firebase-export-metadata.json .

Możesz poinstruować emulatory, aby automatycznie eksportowały dane po zamknięciu, korzystając z opisanych powyżej flag --export-on-exit .

Zintegruj ze swoim systemem CI

Uruchamianie skonteneryzowanych obrazów pakietu emulatorów

Instalacja i konfiguracja pakietu emulatorów z kontenerami w typowej konfiguracji CI jest prosta.

Należy zwrócić uwagę na kilka kwestii:

  • Pliki JAR są instalowane i buforowane w ~/.cache/firebase/emulators/ .

    • Możesz dodać tę ścieżkę do konfiguracji pamięci podręcznej CI, aby uniknąć wielokrotnego pobierania.
  • Jeśli nie masz pliku firebase.json w swoim repozytorium, musisz dodać argument wiersza polecenia do polecenia emulators:start lub emulators:exec , aby określić, które emulatory mają zostać uruchomione. Na przykład,
    --only functions,firestore .

Generuj token uwierzytelniania (tylko emulator hostingu)

Jeśli przepływy pracy ciągłej integracji opierają się na Hostingu Firebase , musisz zalogować się przy użyciu tokena, aby uruchomić firebase emulators:exec . Pozostałe emulatory nie wymagają logowania.

Aby wygenerować token, uruchom firebase login:ci w swoim lokalnym środowisku; nie powinno to być wykonywane z systemu CI. Postępuj zgodnie z instrukcjami, aby uwierzytelnić. Ten krok należy wykonać tylko raz na projekt, ponieważ token będzie ważny w różnych kompilacjach. Token należy traktować jak hasło; upewnij się, że jest to utrzymywane w tajemnicy.

Jeśli środowisko CI umożliwia określenie zmiennych środowiskowych, które mogą być używane w skryptach budowania, po prostu utwórz zmienną środowiskową o nazwie FIREBASE_TOKEN , której wartość jest ciągiem tokenu dostępu. Firebase CLI automatycznie pobierze zmienną środowiskową FIREBASE_TOKEN i emulatory uruchomią się poprawnie.

W ostateczności możesz po prostu dołączyć token do skryptu kompilacji, ale upewnij się, że niezaufane strony nie mają dostępu. W tym podejściu zakodowanym na stałe można dodać --token "YOUR_TOKEN_STRING_HERE" do polecenia firebase emulators:exec .

Użyj interfejsu API REST Hub emulatorów

Wyświetl listę uruchomionych emulatorów

Aby wyświetlić listę aktualnie uruchomionych emulatorów, wyślij żądanie GET do punktu końcowego /emulators centrum emulatorów.

curl localhost:4400/emulators

Wynikiem będzie obiekt JSON zawierający listę wszystkich uruchomionych emulatorów i ich konfigurację hosta/portu, na przykład:

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

Włącz / wyłącz wyzwalacze funkcji w tle

W niektórych sytuacjach konieczne będzie tymczasowe wyłączenie lokalnych wyzwalaczy funkcji i rozszerzeń. Na przykład możesz chcieć usunąć wszystkie dane w emulatorze Cloud Firestore bez uruchamiania żadnych funkcji onDelete , które działają w emulatorach Cloud Functions lub Extensions.

Aby tymczasowo wyłączyć lokalne wyzwalacze funkcji, wyślij żądanie PUT do punktu końcowego /functions/disableBackgroundTriggers centrum emulatorów.

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

Wynikiem będzie obiekt JSON z wyszczególnieniem aktualnego stanu.

{
  "enabled": false
}

Aby włączyć wyzwalacze funkcji lokalnych po ich wyłączeniu, wyślij żądanie PUT do punktu końcowego /functions/enableBackgroundTriggers centrum emulatorów.

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

Wynikiem będzie obiekt JSON z wyszczególnieniem aktualnego stanu.

{
  "enabled": true
}

Integracje z emulatorem SDK

Tabele w tej sekcji wskazują, które emulatory są obsługiwane przez pakiety SDK klienta i administratora. Przyszłość oznacza, że ​​obsługa emulatora jest planowana, ale nie jest jeszcze dostępna.

Dostępność pakietu SDK klienta

Android Platformy Apple Sieć Interfejs Firebase
Android
Interfejs Firebase
iOS
Interfejs Firebase
Sieć
Baza danych czasu rzeczywistego 19.4.0 7.2.0 8.0.0 6.4.0 Przyszły Nie dotyczy
Cloud Firestore 21.6.0 7.2.0 8.0.0 6.4.0 Przyszły Nie dotyczy
Uwierzytelnianie 20.0.0 7.0.0 8.0.0 7.0.0 Przyszły 4.7.2
Cloud Storage dla Firebase 20.0.0 8.0.0 8.4.0 7.0.0 11.0.0 Nie dotyczy
Funkcje chmury 19.1.0 7.2.0 8.0.0 Nie dotyczy Nie dotyczy Nie dotyczy
Hosting Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy
Rozszerzenia Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy

Dostępność pakietu Admin SDK

Węzeł Jawa Pyton Iść
Baza danych czasu rzeczywistego 8.6.0 6.10.0 2.18.0 Przyszły
Cloud Firestore 8.0.0 6.10.0 3.0.0 1.0.0
Uwierzytelnianie 9.3.0 7.2.0 5.0.0 4.2.0
Cloud Storage dla Firebase 9.8.0 Przyszły Przyszły Przyszły
Funkcje chmury Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy
Hosting Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy
Rozszerzenia Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy