Instalowanie, konfigurowanie i integrowanie Pakietu emulatorów lokalnych

Pakiet emulatorów lokalnych Firebase można zainstalować i skonfigurować w różnych środowiskach prototypowania i testowania – od jednorazowych sesji prototypowania po procesy ciągłej integracji na skalę produkcyjną.

Instalowanie Pakietu emulatorów lokalnych

Zanim zainstalujesz pakiet emulatorów, musisz mieć:

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

Aby zainstalować pakiet emulatorów:

  1. Zainstaluj interfejs wiersza poleceń Firebase. Jeśli nie masz jeszcze zainstalowanego wiersza poleceń Firebase, zainstaluj go. Aby korzystać z Pakietu emulatorów, musisz mieć interfejs wiersza poleceń w wersji 8.14.0 lub nowszej. Możesz sprawdzić zainstalowaną wersję za pomocą tego polecenia:
    firebase --version
  2. Jeśli nie masz jeszcze projektu Firebase, zainicjuj bieżący katalog roboczy jako projekt Firebase, postępując zgodnie z instrukcjami wyświetlanymi na ekranie, aby określić, z których usług chcesz korzystać:
    firebase init
  3. Skonfiguruj Pakiet emulatorów. To polecenie uruchamia kreator konfiguracji, który umożliwia wybór interesujących Cię emulatorów, pobranie odpowiednich plików binarnych emulatora i ustawienie portów emulatora, jeśli domyślne ustawienia nie są odpowiednie.
    firebase init emulators

Po zainstalowaniu emulatora nie są przeprowadzane żadne kontrole aktualizacji ani nie są wykonywane żadne dodatkowe automatyczne pobierania, dopóki nie zaktualizujesz wersji interfejsu Firebase CLI.

Konfigurowanie pakietu emulatorów

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

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

Jeśli nie skonfigurujesz tych ustawień, emulatory będą nasłuchiwać na domyślnych portach, a emulatory Cloud Firestore, Realtime DatabaseCloud Storage for Firebase będą działać z otwartymi zabezpieczeniami danych.

Polecenie Opis
init emulators Uruchom kreator inicjowania emulatora. Wskaż emulatory do zainstalowania i opcjonalnie określ ustawienia portu emulatora. init emulators nie powoduje utraty danych. Zaakceptowanie ustawień domyślnych spowoduje zachowanie bieżącej konfiguracji emulatora.

Konfiguracja portu

Każdy emulator jest powiązany z innym portem na urządzeniu z preferowaną wartością domyślną.

Emulator Domyślny port
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 5000
Pub/Sub 8085

Konfiguracja identyfikatora projektu

W zależności od sposobu wywoływania emulatorów możesz uruchamiać wiele instancji emulatora z użyciem różnych identyfikatorów projektu Firebase lub wiele instancji emulatora dla danego identyfikatora projektu. W takich przypadkach instancje emulatora działają w osobnym środowisku.

Zwykle warto ustawić jeden identyfikator projektu dla wszystkich wywołań emulatora, aby Emulator Suite UI, różne emulatory usług i wszystkie uruchomione instancje danego emulatora mogły się prawidłowo komunikować we wszystkich przypadkach.

Local Emulator Suite wyświetla ostrzeżenia, gdy w środowisku wykryje wiele identyfikatorów projektu, ale możesz zastąpić to zachowanie, ustawiając klucz singleProjectMode na false w pliku firebase.json.

Deklaracje identyfikatorów projektów możesz sprawdzić pod kątem niezgodności w tych miejscach:

  • Projekt domyślny w wierszu poleceń. Domyślnie identyfikator projektu zostanie pobrany podczas uruchamiania z projektu wybranego za pomocą firebase init lub firebase use. Aby wyświetlić listę projektów (i sprawdzić, który z nich jest wybrany), użyj firebase projects:list.
  • Testy jednostkowe reguł Identyfikator projektu jest często podawany w wywołaniach metod biblioteki testów jednostkowych reguł initializeTestEnvironment lub initializeTestApp.
  • Flaga --project wiersza poleceń. Przekazanie flagi Firebase CLI--project zastępuje projekt domyślny. Musisz zadbać o to, aby wartość flagi była zgodna z identyfikatorem projektu w testach jednostkowych i podczas inicjowania aplikacji.

Sprawdź też konfiguracje identyfikatorów projektów na poszczególnych platformach, które zostały ustawione podczas konfigurowania projektów na platformach Apple, Androidziew internecie.

Konfiguracja reguł zabezpieczeń

Emulatory będą pobierać konfigurację reguł zabezpieczeń z kluczy konfiguracji database, firestorestoragefirebase.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 języka Java

Realtime Database emulator, Cloud Firestore emulator i część Cloud Storage for Firebase emulatora są oparte na Javie, którą można dostosowywać za pomocą flag JVM za pomocą zmiennej środowiskowej JAVA_TOOL_OPTIONS.

Jeśli na przykład występują błędy związane z miejscem na stercie Javy, możesz zwiększyć maksymalny rozmiar sterty Javy do 4 GB:

export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start

Wiele flag można podać w cudzysłowie, rozdzielając je spacjami, np. JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g". Flagi wpływają tylko na komponenty emulatorów oparte na Javie i nie mają wpływu na inne części interfejsu Firebase CLI, takie jak Emulator Suite UI.

Uruchamianie emulatorów

Możesz uruchamiać emulatory, aby działały do momentu ręcznego zakończenia lub przez czas trwania wyznaczonego skryptu testowego, a następnie automatycznie się wyłączały.

Polecenie Opis
emulators:start Uruchom emulatory usług Firebase skonfigurowanych w firebase.json. Procesy emulatora będą działać do momentu ich wyraźnego zatrzymania. Calling emulators:start will download the emulators to ~/.cache/firebase/emulators/ if they are not already installed.
Flaga Opis
--only Opcjonalnie. ograniczyć, które emulatory mają się uruchamiać. Podaj listę nazw emulatorów rozdzielonych przecinkami, określając co najmniej 1 z tych elementów: „auth”, „database”, „firestore”, „functions”, „hosting” lub „pubsub”.
--inspect-functions debug_port Opcjonalnie. Użyj z Cloud Functions emulatorem, aby włączyć debugowanie funkcji z użyciem punktów przerwania na określonym porcie (lub na porcie domyślnym 9229, jeśli argument zostanie pominięty). Pamiętaj, że gdy ten flag jest podany, Cloud Functions emulator przełącza się w specjalny tryb wykonania szeregowego, w którym funkcje są wykonywane w jednym procesie w kolejności FIFO. Ułatwia to debugowanie funkcji, ale zachowanie różni się od wieloprocesowego, równoległego wykonywania funkcji w chmurze.
--export-on-exit= Opcjonalnie. Używaj z emulatorem Authentication, Cloud Firestore, Realtime Database lub Cloud Storage for Firebase. Poinstruuj emulatory, aby eksportowały dane do katalogu po wyłączeniu, zgodnie z opisem polecenia emulators:export. Katalog eksportu można określić za pomocą tej flagi:firebase emulators:start --export-on-exit=./saved-data. Jeśli użyjesz znaku --import, ścieżka eksportu będzie domyślnie taka sama, np. firebase emulators:start --import=./data-path --export-on-exit. Na koniec, jeśli chcesz, przekaż różne ścieżki katalogów do flag --import--export-on-exit.
--import=import_directory Opcjonalnie. Używaj z emulatorem Authentication, Cloud Firestore, Realtime Database lub Cloud Storage for Firebase. Importowanie danych zapisanych za pomocą opcji uruchamiania --export-on-exit lub polecenia emulators:export do uruchomionej instancji emulatora Authentication, Cloud Firestore, Realtime Database lub Cloud Storage for Firebase. Wszystkie dane znajdujące się obecnie w pamięci emulatora zostaną zastąpione.
--log-verbosity=verbosity Opcjonalnie. Zmniejsza ilość danych wyjściowych rejestrowanych przez emulatory, aby ograniczyć szum w konsoli i plikach dziennika. Prawidłowe wartości to DEBUG, INFO, QUIET, SILENT.
emulators:exec scriptpath Uruchom skrypt w scriptpath po uruchomieniu emulatorów usług Firebase skonfigurowanych w firebase.json. Procesy emulatora zostaną automatycznie zatrzymane po zakończeniu działania skryptu.
Flaga Opis
--only Opcjonalnie. ograniczyć, które emulatory mają się uruchamiać. Podaj listę nazw emulatorów rozdzielonych przecinkami, określając co najmniej 1 z tych elementów: „firestore”, „database”, „functions”, „hosting” lub „pubsub”.
--inspect-functions debug_port Opcjonalnie. Użyj z Cloud Functions emulatorem, aby włączyć debugowanie funkcji z użyciem punktów przerwania na określonym porcie (lub na porcie domyślnym 9229, jeśli argument zostanie pominięty). Pamiętaj, że gdy ten flag jest podany, emulator przełącza się w specjalny tryb wykonywania szeregowego, w którym funkcje są wykonywane w jednym procesie w kolejności FIFO. Ułatwia to debugowanie funkcji, ale zachowanie różni się od wieloprocesowego, równoległego wykonywania funkcji w chmurze.Cloud Functions
--export-on-exit= Opcjonalnie. Używaj z emulatorem Authentication, Cloud Firestore, Realtime Database lub Cloud Storage for Firebase. Poinstruuj emulatory, aby eksportowały dane do katalogu po wyłączeniu, zgodnie z opisem polecenia emulators:export. Katalog eksportu można określić za pomocą tej flagi:firebase emulators:start --export-on-exit=./saved-data. Jeśli użyjesz znaku --import, ścieżka eksportu będzie domyślnie taka sama, np. firebase emulators:start --import=./data-path --export-on-exit. Na koniec, jeśli chcesz, przekaż różne ścieżki katalogów do flag --import--export-on-exit.
--import=import_directory Opcjonalnie. Używaj z emulatorem Authentication, Cloud Firestore, Realtime Database lub Cloud Storage for Firebase. Importowanie danych zapisanych za pomocą opcji uruchamiania --export-on-exit lub polecenia emulators:export do uruchomionej instancji emulatora Authentication, Cloud Firestore, Realtime Database lub Cloud Storage for Firebase. Wszystkie dane znajdujące się obecnie w pamięci emulatora zostaną zastąpione.
--ui Opcjonalnie. Uruchom interfejs emulatora podczas wykonywania.
--log-verbosity=verbosity Opcjonalnie. Zmniejsza ilość danych wyjściowych rejestrowanych przez emulatory, aby ograniczyć szum w konsoli i plikach dziennika. Prawidłowe wartości to DEBUG, INFO, QUIET, SILENT.

Metoda firebase emulators:exec jest zwykle bardziej odpowiednia w przypadku przepływów pracy związanych z ciągłą integracją.

Eksportowanie i importowanie danych z emulatora

Możesz eksportować dane z emulatorów Authentication, Cloud Firestore, Realtime DatabaseCloud Storage for Firebase, aby używać ich jako wspólnego, bazowego zbioru danych, który można udostępniać. Te zbiory danych można importować za pomocą flagi --import, jak opisano powyżej.

emulators:export export_directory

Authentication, Cloud Firestore, Realtime Database lub Cloud Storage for Firebase emulator. Eksportuj dane z działającej instancji emulatora Cloud Firestore, Realtime Database lub Cloud Storage for Firebase. Jeśli podany export_directory nie istnieje, zostanie utworzony. Jeśli określony katalog istnieje, pojawi się prośba o potwierdzenie, że poprzednie dane eksportu mają zostać zastąpione. Możesz pominąć ten komunikat, używając flagi --force. Katalog eksportu zawiera plik manifestu danych:firebase-export-metadata.json.

Możesz skonfigurować emulatory tak, aby automatycznie eksportowały dane po wyłączeniu, używając opisanych powyżej flag --export-on-exit.

Integracja z systemem CI

Uruchamianie skonteneryzowanych obrazów Pakietu emulatorów

Instalacja i konfiguracja pakietu Emulator Suite z kontenerami w typowym środowisku CI jest prosta.

Pamiętaj o kilku kwestiach:

  • Pliki JAR są instalowane i zapisywane w pamięci podręcznej w folderze ~/.cache/firebase/emulators/.

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

Generowanie tokena autoryzacji (tylko emulator hostingu)

Jeśli Twoje przepływy pracy ciągłej integracji opierają się na Firebase Hosting, musisz zalogować się za pomocą tokena, aby uruchomić firebase emulators:exec. Pozostałe emulatory nie wymagają logowania.

Aby wygenerować token, uruchom polecenie firebase login:ci w środowisku lokalnym. Nie należy tego robić w systemie CI. Postępuj zgodnie z instrukcjami, aby się uwierzytelnić. Ten krok wystarczy wykonać tylko raz na projekt, ponieważ token będzie ważny we wszystkich kompilacjach. Token należy traktować jak hasło. Upewnij się, że jest on przechowywany w bezpiecznym miejscu.

Jeśli środowisko CI umożliwia określanie zmiennych środowiskowych, których można używać w skryptach kompilacji, po prostu utwórz zmienną środowiskową o nazwie FIREBASE_TOKEN, a jako wartość podaj ciąg tokena dostępu. Interfejs wiersza poleceń Firebase automatycznie wykryje zmienną środowiskową FIREBASE_TOKEN, a emulatory uruchomią się prawidłowo.

W ostateczności możesz po prostu dodać token do skryptu kompilacji, ale upewnij się, że nie mają do niego dostępu osoby, którym nie ufasz. W przypadku tego podejścia zakodowanego na stałe możesz dodać --token "YOUR_TOKEN_STRING_HERE" do polecenia firebase emulators:exec.

Korzystanie z interfejsu API REST Centrum emulatorów

Wyświetlanie listy uruchomionych emulatorów

Aby wyświetlić listę aktualnie działających emulatorów, wyślij żądanie GET do punktu końcowego /emulators w Centrum emulatorów.

curl localhost:4400/emulators

Wynikiem będzie obiekt JSON zawierający listę wszystkich uruchomionych emulatorów i ich konfigurację hosta/portu, np.:

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

Włączanie i wyłączanie wyzwalaczy funkcji działających w tle

W niektórych sytuacjach konieczne będzie tymczasowe wyłączenie funkcji lokalnych i wyzwalaczy rozszerzeń. Możesz na przykład usunąć wszystkie dane z emulatora Cloud Firestore bez wywoływania żadnych funkcji onDelete działających w emulatorach Cloud Functions lub Extensions.

Aby tymczasowo wyłączyć wyzwalacze funkcji lokalnych, wyślij żądanie PUT do punktu końcowego /functions/disableBackgroundTriggers Emulator Hub.

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

Wynikiem będzie obiekt JSON zawierający szczegółowe informacje o bieżącym stanie.

{
  "enabled": false
}

Aby włączyć lokalne aktywatory funkcji po ich wyłączeniu, wyślij żądanie PUT do punktu końcowego /functions/enableBackgroundTriggers Emulatora Hub.

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

Wynikiem będzie obiekt JSON zawierający szczegółowe informacje o bieżącym stanie.

{
  "enabled": true
}

Integracje pakietu SDK emulatora

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

Dostępność pakietu SDK klienta

Android Platformy Apple Sieć Firebase UI
Android
Firebase UI
iOS
Interfejs Firebase
Web
Realtime Database 19.4.0 7.2.0 8.0.0 6.4.0 Przyszła Nie dotyczy
Cloud Firestore 21.6.0 7.2.0 8.0.0 6.4.0 Przyszła Nie dotyczy
Authentication 20.0.0 7.0.0 8.0.0 7.0.0 Przyszła 4.7.2
Cloud Storage for Firebase 20.0.0 8.0.0 8.4.0 7.0.0 11.0.0 Nie dotyczy
Cloud Functions 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
Extensions Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy

Dostępność pakietu Admin SDK

Węzeł Java Python Go
Realtime Database 8.6.0 6.10.0 2.18.0 Przyszła
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 Przyszła Przyszła Przyszła
Cloud Functions Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy
Hosting Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy
Extensions Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy