Instalowanie, konfigurowanie i integrowanie Pakietu emulatorów lokalnych

Pakiet emulatorów lokalnych Firebase można zainstalować i skonfigurować pod kątem różnych prototypów i środowisk testowych – od jednorazowych sesji prototypowania po przepływy pracy ciągłej integracji na dużą skalę.

Instalowanie Pakietu emulatorów lokalnych

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

  • 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 interfejsu wiersza poleceń Firebase, zainstaluj go teraz. Aby korzystać z Pakietu emulatorów, potrzebujesz interfejsu wiersza poleceń w wersji 8.14.0 lub nowszej. Aby sprawdzić, którą wersję masz, użyj tego polecenia:
    firebase --version
  2. Jeśli nie zostało to jeszcze zrobione, zainicjuj bieżący katalog roboczy jako projekt Firebase, wykonując instrukcje wyświetlane na ekranie, aby określić, których usług chcesz używać:
    firebase init
  3. Skonfiguruj Pakiet emulatorów. To polecenie uruchamia kreatora konfiguracji, dzięki któremu możesz wybrać interesujące Cię emulatory, pobrać odpowiednie pliki binarne emulatora i ustawić porty emulatora, jeśli wartości domyślne są nieodpowiednie.
    firebase init emulators

Gdy zainstalujesz emulator, nie będzie sprawdzana dostępność aktualizacji, a dodatkowe automatyczne pobieranie nie będzie wykonywane, dopóki nie zaktualizujesz interfejsu wiersza poleceń Firebase.

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 polecenie firebase init emulators lub edytując firebase.json ręcznie.
  • Zmień ścieżkę do definicji reguł zabezpieczeń, ręcznie edytując obiekt firebase.json.

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

Polecenie Opis
emulatory init Uruchom kreatora inicjowania emulatora. Określ emulatory do zainstalowania i opcjonalnie określ ustawienia portu emulatora. Metoda init emulators nie jest szkodliwa, a zaakceptowanie wartości domyślnych pozwoli zachować bieżącą konfigurację emulatora.

Konfiguracja portu

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

Emulator Domyślny port
Uwierzytelnianie 9099
Interfejs użytkownika pakietu emulatorów 4000
Cloud Functions 5001
Eventarc 9299
Baza danych czasu rzeczywistego 9500
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 instancji emulatora z użyciem różnych identyfikatorów projektu Firebase lub wiele instancji emulatorów dla danego identyfikatora projektu. W takich przypadkach instancje emulatora działają w osobnym środowisku.

Ogólnie dobrze jest ustawić jeden identyfikator projektu dla wszystkich wywołań emulatorów, aby interfejs użytkownika pakietu emulatorów, różne emulatory usług i wszystkie uruchomione instancje określonego emulatora mogły się komunikować prawidłowo we wszystkich przypadkach.

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

Deklaracje dotyczące identyfikatorów projektów znajdziesz tutaj:

  • Domyślny projekt w wierszu poleceń. Domyślnie identyfikator projektu będzie pobierany przy uruchamianiu z projektu wybranego za pomocą firebase init lub firebase use. Aby wyświetlić listę projektów (i sprawdzić, który jest wybrany), użyj funkcji firebase projects:list.
  • Testy jednostkowe reguł. Identyfikator projektu jest często podawany w wywołaniach metod biblioteki testowania jednostek reguł initializeTestEnvironment lub initializeTestApp.
  • Flaga wiersza poleceń --project. Przekazywanie flagi interfejsu wiersza poleceń Firebase --project zastępuje projekt domyślny. Musisz sprawdzić, czy wartość flagi jest zgodna z identyfikatorem projektu w testach jednostkowych i inicjowaniu aplikacji.

Sprawdź też ustawione na poszczególnych platformach konfiguracje identyfikatorów projektów ustawione podczas konfigurowania projektów platform Apple, Androida i internetu.

Konfiguracja reguł zabezpieczeń

Emulatory pobierzą konfigurację reguł zabezpieczeń z kluczy konfiguracyjnych database, firestore i 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 Javy

Emulator bazy danych czasu rzeczywistego, emulator Cloud Firestore i część emulatora Cloud Storage dla Firebase opiera się na Javie, którą można dostosować za pomocą flag JVM za pomocą zmiennej środowiskowej JAVA_TOOL_OPTIONS.

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

export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start

Możesz podać kilka flag w cudzysłowach rozdzielonych spacjami, np. JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g". Flagi te mają wpływ tylko na oparte na Javie komponenty emulatorów i nie mają wpływu na inne części interfejsu wiersza poleceń Firebase, takie jak interfejs pakietu emulatorów.

Uruchamianie emulatorów

Możesz uruchamiać emulatory, dopóki nie zakończą ich ręcznie. Możesz też uruchamiać je przez czas trwania wyznaczonego skryptu testowego, a następnie automatycznie się wyłączyć.

Polecenie Opis
emulators:start Uruchom emulatory usług Firebase skonfigurowanych w firebase.json. Procesy emulatora będą działać, dopóki nie zostaną wyraźnie zatrzymane. Wywołanie emulators:start spowoduje pobranie emulatorów do katalogu ~/.cache/firebase/emulators/, jeśli nie są one jeszcze zainstalowane.
Flaga Opis
--only Opcjonalne. Określ, które emulatory mają być uruchamiane. Podaj oddzieloną przecinkami listę nazw emulatorów, określając co najmniej 1 ustawienie „auth”, „database”, „firestore”, „functions”, „hosting” lub „pubsub”.
--inspect-functions debug_port Opcjonalne. Użyj emulatora Cloud Functions, aby włączyć debugowanie punktów przerwania funkcji na określonym porcie (lub na domyślnym porcie 9229, jeśli argument zostanie pominięty). Pamiętaj, że po podaniu tej flagi emulator Cloud Functions przełącza się w specjalny tryb serializacji, w którym funkcje są wykonywane w jednym procesie w kolejności sekwencyjnej (FIFO). Upraszcza to debugowanie funkcji, chociaż sposób działania różni się od wieloprocesowego, równoległego wykonywania funkcji w chmurze.
--export-on-exit= Opcjonalne. Do użytku z uwierzytelnianiem, Cloud Firestore, Bazą danych czasu rzeczywistego lub emulatorem Cloud Storage dla Firebase. Poleć emulatorom, aby po wyłączeniu wyeksportowały dane do katalogu, 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żywasz --import, domyślna ścieżka eksportu jest taka sama, np. firebase emulators:start --import=./data-path --export-on-exit. Na koniec, jeśli to konieczne, przekaż różne ścieżki katalogów do flag --import i --export-on-exit.
--import=import_directory Opcjonalne. Do użytku z uwierzytelnianiem, Cloud Firestore, Bazą danych czasu rzeczywistego lub emulatorem Cloud Storage dla Firebase. Zaimportuj dane zapisane przy użyciu opcji uruchamiania --export-on-exit lub polecenia emulators:export do uruchomionej instancji emulatora uwierzytelniania, Cloud Firestore, Bazy danych czasu rzeczywistego lub Cloud Storage dla Firebase. Wszystkie dane znajdujące się obecnie w pamięci emulatora zostaną nadmiarowe.
emulators:exec scriptpath Po uruchomieniu emulatorów usług Firebase skonfigurowanych w zadaniu firebase.json uruchom skrypt z adresu scriptpath. Po zakończeniu działania skryptu procesy emulatora zostaną automatycznie zatrzymane.
Flaga Opis
--only Opcjonalne. Określ, które emulatory mają być uruchamiane. Podaj oddzieloną przecinkami listę nazw emulatorów, określając co najmniej 1 z tych wartości: „firestore”, „database”, „functions”, „hosting” lub „pubsub”.
--inspect-functions debug_port Opcjonalne. Użyj emulatora Cloud Functions, aby włączyć debugowanie punktów przerwania funkcji na podanym porcie (lub domyślnego portu 9229, jeśli argument zostanie pominięty). Pamiętaj, że po podaniu tej flagi emulator Cloud Functions przełącza się w specjalny tryb serializacji, w którym funkcje są wykonywane w jednym procesie w kolejności sekwencyjnej (FIFO). Upraszcza to debugowanie funkcji, chociaż sposób działania różni się od wieloprocesowego, równoległego wykonywania funkcji w chmurze.
--export-on-exit= Opcjonalne. Do użytku z uwierzytelnianiem, Cloud Firestore, Bazą danych czasu rzeczywistego lub emulatorem Cloud Storage dla Firebase. Poleć emulatorom, aby po wyłączeniu wyeksportowały dane do katalogu, 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żywasz --import, domyślna ścieżka eksportu jest taka sama, np. firebase emulators:start --import=./data-path --export-on-exit. Na koniec, jeśli to konieczne, przekaż różne ścieżki katalogów do flag --import i --export-on-exit.
--import=import_directory Opcjonalne. Do użytku z uwierzytelnianiem, Cloud Firestore, Bazą danych czasu rzeczywistego lub emulatorem Cloud Storage dla Firebase. Zaimportuj dane zapisane przy użyciu opcji uruchamiania --export-on-exit lub polecenia emulators:export do uruchomionej instancji emulatora uwierzytelniania, Cloud Firestore, Bazy danych czasu rzeczywistego lub Cloud Storage dla Firebase. Wszystkie dane znajdujące się obecnie w pamięci emulatora zostaną zastąpione.
--ui Opcjonalne. uruchamiać interfejs emulatora podczas wykonywania zadania;

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

Eksportowanie i importowanie danych emulatora

Możesz eksportować dane z emulatorów usług Uwierzytelnianie, Cloud Firestore, Baza danych czasu rzeczywistego i Cloud Storage dla Firebase, aby wykorzystać je jako wspólny, wspólny zbiór danych bazowych. Te zbiory danych możesz importować za pomocą flagi --import, jak opisano powyżej.

emulators:export export_directory

Uwierzytelnianie, Cloud Firestore, Baza danych czasu rzeczywistego lub Emulator Cloud Storage dla Firebase. Eksportuj dane z działającej instancji emulatora Cloud Firestore, Bazy danych czasu rzeczywistego lub Cloud Storage dla Firebase. Jeśli obiekt export_directory jeszcze nie istnieje, zostanie utworzony. Jeśli określony katalog istnieje, pojawi się prośba o potwierdzenie, że poprzedni eksport powinien zostać zastąpiony. Możesz pominąć ten prompt, używając flagi --force. Katalog eksportu zawiera plik manifestu danych firebase-export-metadata.json.

Możesz polecić emulatorom automatyczne eksportowanie danych po wyłączeniu przy użyciu opisanych powyżej flag --export-on-exit.

Integracja z systemem CI

Uruchamianie obrazów skonteneryzowanego Pakietu emulatorów

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

Pamiętaj o kilku kwestiach:

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

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

Generowanie tokena uwierzytelniania (tylko emulator hostowania)

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

Aby wygenerować token, uruchom firebase login:ci w środowisku lokalnym. Nie należy tego robić w systemie CI. Wykonaj instrukcje uwierzytelniania. Ten krok musisz wykonać tylko raz w każdym projekcie, ponieważ token będzie ważny we wszystkich kompilacjach. Token powinien być traktowany jak hasło. Nie należy go ujawniać.

Jeśli środowisko CI umożliwia określenie zmiennych środowiskowych, których można używać w skryptach kompilacji, wystarczy utworzyć zmienną środowiskową o nazwie FIREBASE_TOKEN, której wartość będzie ciągiem znaków tokena dostępu. Interfejs wiersza poleceń Firebase automatycznie pobierze zmienną środowiskową FIREBASE_TOKEN, a emulatory uruchomią się prawidłowo.

W ostateczności możesz po prostu umieścić token w skrypcie kompilacji, ale upewnij się, że niezaufane osoby nie mają do niego dostępu. Aby to zrobić, możesz dodać --token "YOUR_TOKEN_STRING_HERE" do polecenia firebase emulators:exec.

Używanie interfejsu API REST centrum emulatorów

Wyświetlenie listy uruchomionych emulatorów

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

curl localhost:4400/emulators

W efekcie powstanie obiekt JSON z listą wszystkich uruchomionych emulatorów wraz z 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łączanie i wyłączanie aktywatorów funkcji działających w tle

W niektórych sytuacjach konieczne jest tymczasowe wyłączenie aktywatorów funkcji lokalnych i rozszerzeń. Możesz na przykład usunąć wszystkie dane w emulatorze Cloud Firestore bez aktywowania funkcji onDelete, które działają w emulatorach Cloud Functions lub rozszerzeń.

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

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

W rezultacie powstanie obiekt JSON zawierający szczegółowe informacje na temat bieżącego stanu.

{
  "enabled": false
}

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

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

W rezultacie powstanie obiekt JSON zawierający szczegółowe informacje na temat bieżącego stanu.

{
  "enabled": true
}

Integracje pakietu SDK emulatorów

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

Dostępność pakietu SDK klienta

Urządzenie z Androidem Platformy Apple Sieć Interfejs Firebase
Android
Interfejs Firebase
iOS
Interfejs Firebase
Strona internetowa
Baza danych czasu rzeczywistego 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
Uwierzytelnianie 20.0.0 7.0.0 8.0.0 7.0.0 Przyszła 4.7.2
Cloud Storage dla 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
Rozszerzenia Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy

Dostępność pakietu Admin SDK

Węzeł Java Python Go
Baza danych czasu rzeczywistego 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
Uwierzytelnianie 9.3.0 7.2.0 5.0.0 4.2.0
Cloud Storage dla 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
Rozszerzenia Nie dotyczy Nie dotyczy Nie dotyczy Nie dotyczy