Uruchamiaj funkcje lokalnie

Interfejs wiersza polecenia Firebase zawiera emulator Cloud Functions, który może emulować następujące typy funkcji:

  • Funkcje HTTPS
  • Funkcje wywoływalne
  • Funkcje w tle uruchamiane z uwierzytelniania Firebase, bazy danych czasu rzeczywistego, Cloud Firestore, Cloud Storage i Cloud Pub/Sub.

Możesz uruchamiać funkcje lokalnie, aby je przetestować przed wdrożeniem w środowisku produkcyjnym.

Zainstaluj interfejs wiersza polecenia Firebase

Aby korzystać z emulatora Cloud Functions, najpierw zainstaluj interfejs CLI Firebase:

npm install -g firebase-tools

Aby móc korzystać z lokalnego emulatora, Twoje funkcje Cloud Functions muszą zależeć od:

  • firebase-admin w wersji 8.0.0 lub nowszej.
  • firebase-functions wersji 3.0.0 lub nowszej.

Skonfiguruj poświadczenia administratora (opcjonalnie)

Jeśli chcesz, aby Twoje testy funkcji współdziałały z interfejsami API Google lub innymi interfejsami API Firebase za pośrednictwem pakietu Firebase Admin SDK , może być konieczne skonfigurowanie danych logowania administratora.

  • Wyzwalacze Cloud Firestore i Realtime Database mają już wystarczające dane uwierzytelniające i nie wymagają dodatkowej konfiguracji.
  • Wszystkie inne interfejsy API, w tym interfejsy API Firebase, takie jak uwierzytelnianie i FCM, lub interfejsy API Google, takie jak Cloud Translation lub Cloud Speech, wymagają kroków konfiguracyjnych opisanych w tej sekcji. Ma to zastosowanie niezależnie od tego, czy używasz powłoki Cloud Functions, czy firebase emulators:start .

Aby skonfigurować poświadczenia administratora dla emulowanych funkcji:

  1. Otwórz panel Konta usług w konsoli Google Cloud.
  2. Upewnij się, że wybrane jest domyślne konto usługi App Engine i użyj menu opcji po prawej stronie, aby wybrać opcję Utwórz klucz .
  3. Po wyświetleniu monitu wybierz typ klucza JSON i kliknij opcję Utwórz .
  4. Ustaw domyślne dane uwierzytelniające Google, aby wskazywały pobrany klucz:

    Uniksa

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase emulators:start
    

    Okna

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase emulators:start
    

Po wykonaniu tych kroków testy funkcji uzyskają dostęp do interfejsów API Firebase i Google za pomocą pakietu Admin SDK . Na przykład podczas testowania wyzwalacza uwierzytelniania emulowana funkcja może wywołać admin.auth().getUserByEmail(email) .

Skonfiguruj konfigurację funkcji (opcjonalnie)

Jeśli używasz zmiennych konfiguracyjnych funkcji niestandardowych, najpierw uruchom komendę, aby uzyskać niestandardową konfigurację (uruchom ją w katalogu functions ) w środowisku lokalnym:

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

Uruchom pakiet emulatorów

Aby uruchomić emulator Cloud Functions, użyj polecenia emulators:start :

firebase emulators:start

Polecenie emulators:start uruchomi emulatory Cloud Functions, Cloud Firestore, Realtime Database i Firebase Hosting w oparciu o produkty zainicjowane w lokalnym projekcie za pomocą firebase init . Jeśli chcesz uruchomić konkretny emulator, użyj flagi --only :

firebase emulators:start --only functions

Jeśli chcesz uruchomić zestaw testów lub skrypt testowy po uruchomieniu emulatorów, użyj polecenia emulators:exec :

firebase emulators:exec "./my-test.sh"

Instrumentuj swoją aplikację, aby komunikowała się z emulatorami

Aby przygotować aplikację do interakcji z emulatorami, może być konieczne wykonanie dodatkowej konfiguracji.

Instrumentuj swoją aplikację pod kątem funkcji wywoływalnych

Jeśli Twoje działania prototypowe i testowe obejmują wywoływalne funkcje zaplecza , skonfiguruj interakcję z emulatorem Cloud Functions for Firebase w następujący sposób:

Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val functions = Firebase.functions
functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseFunctions functions = FirebaseFunctions.getInstance();
functions.useEmulator("10.0.2.2", 5001);
Szybki
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")

Web modular API

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "127.0.0.1", 5001);

Web namespaced API

firebase.functions().useEmulator("127.0.0.1", 5001);

Instrumentuj swoją aplikację pod kątem emulacji funkcji HTTPS

Każda funkcja HTTPS w Twoim kodzie będzie obsługiwana z lokalnego emulatora przy użyciu następującego formatu adresu URL:

http:// $HOST : $PORT / $PROJECT / $REGION / $NAME

Na przykład prosta funkcja helloWorld z domyślnym portem hosta i regionem będzie obsługiwana pod adresem:

https://localhost:5001/ $PROJECT /us-central1/helloWorld

Instrumentuj aplikację pod kątem emulacji funkcji wyzwalanych w tle

Emulator Cloud Functions obsługuje funkcje uruchamiane w tle z następujących źródeł:

  • Emulator bazy danych czasu rzeczywistego
  • Emulator Cloud Firestore
  • Emulator uwierzytelniania
  • Emulator Pub/Sub

Aby wyzwalać zdarzenia w tle, zmodyfikuj zasoby zaplecza za pomocą interfejsu użytkownika pakietu Emulator Suite lub łącząc aplikację lub kod testowy z emulatorami za pomocą zestawu SDK dla swojej platformy.

Testuj procedury obsługi zdarzeń niestandardowych emitowanych przez rozszerzenia

W przypadku funkcji, które zaimplementowałeś do obsługi niestandardowych zdarzeń Firebase Extensions za pomocą Cloud Functions v2, emulator Cloud Functions łączy się w parę z emulatorem Eventarc, aby obsługiwać wyzwalacze Eventarc .

Aby przetestować niestandardowe procedury obsługi zdarzeń dla rozszerzeń emitujących zdarzenia, należy zainstalować emulatory Cloud Functions i Eventarc.

Środowisko wykonawcze Cloud Functions ustawia zmienną środowiskową EVENTARC_EMULATOR na localhost:9299 w bieżącym procesie, jeśli działa emulator Eventarc. Zestawy SDK Firebase Admin automatycznie łączą się z emulatorem Eventarc, gdy ustawiona jest zmienna środowiskowa EVENTARC_EMULATOR . Możesz zmodyfikować port domyślny, jak opisano w sekcji Konfigurowanie pakietu emulatorów lokalnych .

Gdy zmienne środowiskowe są prawidłowo skonfigurowane, pakiet Firebase Admin SDK automatycznie wysyła zdarzenia do emulatora Eventarc. Z kolei emulator Eventarc wywołuje ponownie emulator Cloud Functions, aby uruchomić dowolne zarejestrowane procedury obsługi.

Możesz sprawdzić dzienniki funkcji w interfejsie użytkownika pakietu emulatora, aby uzyskać szczegółowe informacje na temat wykonywania procedury obsługi.

Interakcje z innymi usługami

Zestaw emulatorów zawiera wiele emulatorów, które umożliwiają testowanie interakcji między produktami.

Chmura Firestore

Jeśli masz funkcje korzystające z pakietu Firebase Admin SDK do zapisu w Cloud Firestore, zapisy te zostaną wysłane do emulatora Cloud Firestore, jeśli jest on uruchomiony. Jeśli w wyniku tych zapisów zostaną uruchomione dalsze funkcje, zostaną one uruchomione w emulatorze Cloud Functions.

Magazyn w chmurze

Jeśli masz funkcje korzystające z pakietu Firebase Admin SDK (wersja 9.7.0 lub nowsza) do zapisu w Cloud Storage, te zapisy zostaną wysłane do emulatora Cloud Storage, jeśli jest on uruchomiony. Jeśli w wyniku tych zapisów zostaną uruchomione dalsze funkcje, zostaną one uruchomione w emulatorze Cloud Functions.

Uwierzytelnianie Firebase

Jeśli masz funkcje korzystające z pakietu Firebase Admin SDK (wersja 9.3.0 lub nowsza) do zapisu w usłudze Firebase Authentication, zapisy te zostaną wysłane do emulatora Auth, jeśli jest on uruchomiony. Jeśli w wyniku tych zapisów zostaną uruchomione dalsze funkcje, zostaną one uruchomione w emulatorze Cloud Functions.

Hosting Firebase

Jeśli używasz Cloud Functions do generowania zawartości dynamicznej dla Hostingu Firebase , firebase emulators:start używają lokalnych funkcji HTTP jako serwerów proxy dla hostingu.

Logowanie

Emulator przesyła strumieniowo logi z twoich funkcji do okna terminala, w którym są uruchamiane. Wyświetla wszystkie dane wyjściowe console.log() , console.info() , console.error() i console.warn() wewnątrz twoich funkcji.

Następne kroki

Pełny przykład użycia pakietu emulatorów Firebase można znaleźć w przykładzie szybkiego startu testowania .