Uruchamiaj funkcje lokalnie

Interfejs wiersza poleceń Firebase zawiera emulator Cloud Functions, który może emulować te typy funkcji:

  • Funkcje HTTPS
  • Funkcje wywoływane
  • funkcje działające w tle, aktywowane przez Uwierzytelnianie Firebase, Bazę danych czasu rzeczywistego, Cloud Firestore, Cloud Storage i Cloud Pub/Sub;

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

Instalowanie interfejsu wiersza poleceń Firebase

Aby używać emulatora Cloud Functions, najpierw zainstaluj interfejs wiersza poleceń Firebase:

npm install -g firebase-tools

Aby można było używać lokalnego emulatora, funkcje w Cloud Functions muszą zależeć od tych czynników:

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

Skonfiguruj dane logowania administratora (opcjonalnie)

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

  • Aktywatory Cloud Firestore i Bazy danych czasu rzeczywistego mają już wystarczające dane logowania i nie wymagają dodatkowej konfiguracji.
  • Wszystkie pozostałe interfejsy API, w tym interfejsy Firebase API, np. Authentication i FCM oraz interfejsy API Google, takie jak Cloud Translation czy Cloud Speech, wymagają wykonania kroków konfiguracji opisanych w tej sekcji. Ma to zastosowanie niezależnie od tego, czy używasz powłoki Cloud Functions, czy firebase emulators:start.

Aby skonfigurować dane logowania administratora na potrzeby emulowanych funkcji:

  1. Otwórz panel Konta usługi w konsoli Google Cloud.
  2. Upewnij się, że wybrana jest opcja Domyślne konto usługi App Engine i w menu opcji po prawej stronie wybierz Utwórz klucz.
  3. Gdy pojawi się prośba, wybierz typ klucza JSON i kliknij Utwórz.
  4. Ustaw swoje domyślne dane logowania Google, by wskazywały pobrany klucz:

    Unix

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

    Windows

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

Gdy wykonasz te czynności, testy funkcji będą dostępne dla Firebase i interfejsów API Google za pomocą pakietu Admin SDK. Na przykład podczas testowania aktywatora uwierzytelniania, emulowana funkcja może wywoływać metodę admin.auth().getUserByEmail(email).

Skonfiguruj funkcje (opcjonalnie)

Jeśli używasz zmiennych konfiguracji funkcji niestandardowych, najpierw uruchom polecenie, 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

Uruchamianie pakietu emulatorów

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

firebase emulators:start

Polecenie emulators:start uruchomi emulatory Cloud Functions, Cloud Firestore, Bazy danych czasu rzeczywistego i Hostingu Firebase na podstawie usług zainicjowanych w lokalnym projekcie za pomocą firebase init. Jeśli chcesz uruchomić konkretny emulator, użyj flagi --only:

firebase emulators:start --only functions

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

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

Dostosuj aplikację do emulatorów

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

Dostosuj aplikację pod kątem funkcji wywoływanych

Jeśli Twój prototyp i działania testowe obejmują wywoływane funkcje backendu, skonfiguruj interakcję z emulatorem Cloud Functions dla Firebase w ten 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);
Swift
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);

Interfejs API internetowej przestrzeni nazw

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

Dostosuj aplikację do emulacji funkcji HTTPS

Każda funkcja HTTPS w kodzie będzie obsługiwana przez lokalny emulator przy użyciu adresu URL w tym formacie:

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

Na przykład prosta funkcja helloWorld z domyślnym portem i regionem hosta byłaby obsługiwana w tym miejscu:

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

Dostosuj aplikację do emulacji funkcji wyzwalanych w tle

Emulator Cloud Functions obsługuje funkcje aktywowane w tle z tych źródeł:

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

Aby aktywować zdarzenia w tle, zmodyfikuj zasoby backendu, korzystając z interfejsu Pakietu emulatorów albo łącząc aplikację lub kod testowy z emulatorami przy użyciu pakietu SDK przeznaczonego na Twoją platformę.

Testowe moduły obsługi zdarzeń niestandardowych generowane przez rozszerzenia

W przypadku funkcji zaimplementowanych do obsługi zdarzeń niestandardowych Rozszerzeń w Firebase w Cloud Functions w wersji 2 emulator Cloud Functions łączy się z emulatorem Eventarc w celu obsługi wyzwalaczy Eventarc.

Aby przetestować niestandardowe moduły obsługi zdarzeń pod kątem rozszerzeń, które emitują zdarzenia, musisz zainstalować emulatory Cloud Functions i Eventarc.

Środowisko wykonawcze Cloud Functions ustawia zmienną środowiskową EVENTARC_EMULATOR na localhost:9299 w bieżącym procesie, jeśli emulator Eventarc jest uruchomiony. Pakiety Firebase Admin SDK automatycznie łączą się z emulatorem Eventarc po ustawieniu zmiennej środowiskowej EVENTARC_EMULATOR. Port domyślny można zmienić w sposób omówiony w artykule Konfigurowanie Pakietu emulatorów lokalnych.

Po prawidłowym skonfigurowaniu zmiennych środowiskowych pakiet Firebase Admin SDK automatycznie wysyła zdarzenia do emulatora Eventarc. Z kolei emulator Eventarc wywołuje z powrotem do emulatora Cloud Functions, aby aktywować wszystkie zarejestrowane moduły obsługi.

Szczegółowe informacje o wykonywaniu modułu obsługi możesz sprawdzić w logach funkcji w interfejsie pakietu emulatorów.

Interakcje z innymi usługami

Ten pakiet zawiera wiele emulatorów, które umożliwiają testowanie interakcji między usługami.

Cloud Firestore

Jeśli Twoje funkcje korzystają z pakietu SDK Firebase Admin do zapisywania w Cloud Firestore, te zapisy zostaną wysłane do emulatora Cloud Firestore, jeśli jest uruchomiony. Jeśli kolejne funkcje zostaną aktywowane przez te zapisy, będą uruchamiane w emulatorze Cloud Functions.

Cloud Storage

Jeśli masz funkcje, które korzystają z pakietu Firebase Admin SDK (w wersji 9.7.0 lub nowszej) do zapisywania w Cloud Storage, te zapisy zostaną wysłane do emulatora Cloud Storage, jeśli jest uruchomiony. Jeśli kolejne funkcje zostaną aktywowane przez te zapisy, będą uruchamiane w emulatorze Cloud Functions.

Uwierzytelnianie Firebase

Jeśli masz funkcje, które korzystają z pakietu Firebase Admin SDK (w wersji 9.3.0 lub nowszej) do zapisu w Uwierzytelnianiu Firebase, te zapisy będą wysyłane do emulatora uwierzytelniania, jeśli jest on uruchomiony. Jeśli kolejne funkcje zostaną aktywowane przez te zapisy, będą uruchamiane w emulatorze Cloud Functions.

Hosting Firebase

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

Logowanie

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

Następne kroki

Pełny przykład korzystania z pakietu emulatorów Firebase znajdziesz w przykładzie krótkiego wprowadzenia do testowania.