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ć:
Aby zainstalować pakiet emulatorów:
- 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
- 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
- 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ącfirebase.json
ręcznie. - Zmień ścieżkę do definicji reguł zabezpieczeń, edytując ją
firebase.json
ręcznie.
Jeśli nie skonfigurujesz tych ustawień, emulatory będą nasłuchiwać na domyślnych portach, a emulatory Cloud Firestore, Realtime Database i Cloud 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
lubfirebase use
. Aby wyświetlić listę projektów (i sprawdzić, który z nich jest wybrany), użyjfirebase projects:list
. - Testy jednostkowe reguł Identyfikator projektu jest często podawany w wywołaniach metod biblioteki testów jednostkowych reguł
initializeTestEnvironment
lubinitializeTestApp
. - 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, Androidzie i w internecie.
Konfiguracja reguł zabezpieczeń
Emulatory będą pobierać konfigurację reguł zabezpieczeń z kluczy konfiguracji 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 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.
|
||||||||||||||
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.
|
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 Database i Cloud 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
Możesz skonfigurować emulatory tak, aby automatycznie eksportowały dane po wyłączeniu, używając opisanych powyżej flag |
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 poleceniaemulators:start
lubemulators: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 |