Installer, configurer et intégrer Local Emulator Suite

La suite Firebase Local Emulator peut être installée et configurée pour différents environnements de prototypes et de tests, depuis des sessions de prototypage ponctuelles jusqu'aux workflows d'intégration continue à l'échelle de la production.

Installez la suite d'émulateurs locaux

Avant d'installer Emulator Suite, vous aurez besoin de :

  • Node.js version 16.0 ou supérieure.
  • Java JDK version 11 ou supérieure.

Pour installer la suite d'émulateur :

  1. Installez la CLI Firebase . Si la CLI Firebase n'est pas déjà installée, installez-la maintenant . Vous aurez besoin de la version CLI 8.14.0 ou supérieure pour utiliser Emulator Suite. Vous pouvez vérifier quelle version vous avez installée à l'aide de la commande suivante :
    firebase --version
  2. Si vous ne l'avez pas déjà fait, initialisez le répertoire de travail actuel en tant que projet Firebase, en suivant les invites à l'écran pour spécifier les produits à utiliser :
    firebase init
  3. Configurez la suite d'émulateur. Cette commande démarre un assistant de configuration qui vous permet de sélectionner les émulateurs qui vous intéressent, de télécharger les fichiers binaires de l'émulateur correspondant et de définir les ports de l'émulateur si les valeurs par défaut ne sont pas appropriées.
    firebase init emulators

Une fois un émulateur installé, aucune vérification de mise à jour n'est effectuée et aucun téléchargement automatique supplémentaire n'aura lieu jusqu'à ce que vous mettiez à jour votre version Firebase CLI.

Configurer la suite d'émulateurs

Vous pouvez éventuellement configurer les ports réseau des émulateurs et le chemin d'accès aux définitions de règles de sécurité dans le fichier firebase.json :

  • Modifiez les ports de l'émulateur en exécutant firebase init emulators ou en modifiant manuellement firebase.json .
  • Modifiez le chemin d'accès aux définitions de règles de sécurité en modifiant manuellement firebase.json .

Si vous ne configurez pas ces paramètres, les émulateurs écouteront sur leurs ports par défaut et les émulateurs Cloud Firestore, Realtime Database et Cloud Storage for Firebase fonctionneront avec une sécurité de données ouverte.

Commande Description
émulateurs d'initialisation Démarrez un assistant d'initialisation de l'émulateur. Identifiez les émulateurs à installer et spécifiez éventuellement les paramètres du port de l'émulateur. init emulators sont non destructifs ; accepter les valeurs par défaut préservera la configuration actuelle de l’émulateur.

Configuration des ports

Chaque émulateur se lie à un port différent de votre machine avec une valeur par défaut préférée.

Émulateur Port par défaut
Authentification 9099
Interface utilisateur de la suite d'émulateur 4000
Fonctions cloud 5001
Arc Événementiel 9299
Base de données en temps réel 9000
Cloud Firestore 8080
Stockage cloud pour Firebase 9199
Hébergement Firebase 5000
Pub/Sous 8085

Configuration de l'ID de projet

Selon la manière dont vous appelez les émulateurs, vous pouvez exécuter plusieurs instances d'un émulateur en utilisant différents ID de projet Firebase ou plusieurs instances d'émulateur pour un ID de projet donné. Dans de tels cas, les instances d'émulateur s'exécutent dans un environnement distinct.

Il est généralement recommandé de définir un ID de projet pour tous les appels d'émulateur, afin que l'interface utilisateur d'Emulator Suite, les différents émulateurs de produits et toutes les instances en cours d'exécution d'un émulateur particulier puissent communiquer correctement dans tous les cas.

Local Emulator Suite émet des avertissements lorsqu'il détecte plusieurs ID de projet dans l'environnement, bien que vous puissiez remplacer ce comportement en définissant la clé singleProjectMode sur false dans votre firebase.json .

Vous pouvez vérifier les incohérences dans les déclarations d'ID de projet :

  • Le projet par défaut dans la ligne de commande. Par défaut, l'ID du projet sera pris au démarrage à partir du projet sélectionné avec firebase init ou firebase use . Pour afficher la liste des projets (et voir lequel est sélectionné), utilisez firebase projects:list .
  • Tests unitaires de règles. L'ID du projet est souvent spécifié dans les appels aux méthodes de la bibliothèque de tests unitaires de règles initializeTestEnvironment ou initializeTestApp .
  • L'indicateur --project de ligne de commande. La transmission de l'indicateur Firebase CLI --project remplace le projet par défaut. Vous devrez vous assurer que la valeur de l'indicateur correspond à l'ID du projet lors des tests unitaires et de l'initialisation de l'application.

Vérifiez également les configurations d'ID de projet spécifiques à la plate-forme que vous avez définies lors de la configuration de vos plates-formes Apple , Android et projets Web .

Configuration des règles de sécurité

Les émulateurs prendront la configuration des règles de sécurité à partir des clés de configuration de la database , firestore et storage dans 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"
    }
  }
}

Spécification des options Java

L'émulateur Realtime Database, l'émulateur Cloud Firestore et une partie de l'émulateur Cloud Storage pour Firebase sont basés sur Java, qui peut être personnalisé avec des indicateurs JVM via la variable d'environnement JAVA_TOOL_OPTIONS .

Par exemple, si vous rencontrez des erreurs liées à l'espace du tas Java, vous pouvez augmenter la taille maximale du tas Java à 4 Go :

export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start

Plusieurs indicateurs peuvent être spécifiés entre guillemets séparés par des espaces, comme JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g" . Les indicateurs n'affectent que les composants Java des émulateurs et n'ont aucun effet sur les autres parties de la CLI Firebase, telles que l'interface utilisateur d'Emulator Suite.

Démarrer les émulateurs

Vous pouvez démarrer les émulateurs pour qu'ils s'exécutent jusqu'à ce qu'ils soient arrêtés manuellement, ou pour qu'ils s'exécutent pendant la durée d'un script de test désigné, puis s'arrêtent automatiquement.

Commande Description
émulateurs:démarrer Démarrez les émulateurs pour les produits Firebase configurés dans firebase.json . Les processus d'émulateur continueront à s'exécuter jusqu'à ce qu'ils soient explicitement arrêtés. L'appel emulators:start téléchargera les émulateurs dans ~/.cache/firebase/emulators/ s'ils ne sont pas déjà installés.
Drapeau Description
--only Facultatif. Limitez les émulateurs qui démarrent. Fournissez une liste de noms d'émulateurs séparés par des virgules, en spécifiant un ou plusieurs des noms suivants : "auth", "base de données", "firestore", "fonctions", "hébergement" ou "pubsub".
--inspect-functions debug_port Facultatif. À utiliser avec l'émulateur Cloud Functions pour activer le débogage du point d'arrêt des fonctions sur le port spécifié (ou sur le port par défaut 9229 si l'argument est omis). Notez que lorsque cet indicateur est fourni, l'émulateur Cloud Functions passe à un mode d'exécution sérialisé spécial dans lequel les fonctions sont exécutées en un seul processus, dans un ordre séquentiel (FIFO) ; cela simplifie le débogage des fonctions, bien que le comportement diffère de l'exécution parallèle et multi-processus de fonctions dans le cloud.
--export-on-exit= Facultatif. À utiliser avec l'émulateur Authentification, Cloud Firestore, Realtime Database ou Cloud Storage for Firebase. Demandez au(x) émulateur(s) d'exporter les données vers un répertoire lors de l'arrêt, comme décrit pour la commande emulators:export . Le répertoire d'exportation peut être spécifié avec cet indicateur : firebase emulators:start --export-on-exit=./saved-data . Si --import est utilisé, le chemin d'exportation est le même par défaut ; par exemple : firebase emulators:start --import=./data-path --export-on-exit . Enfin, si vous le souhaitez, transmettez différents chemins de répertoire aux indicateurs --import et --export-on-exit .
--import= import_directory Facultatif. À utiliser avec l'émulateur Authentification, Cloud Firestore, Realtime Database ou Cloud Storage for Firebase. Importez les données enregistrées à l'aide de l'option de démarrage --export-on-exit ou de la commande emulators:export vers une instance d'émulateur d'authentification, Cloud Firestore, Realtime Database ou Cloud Storage pour Firebase en cours d'exécution. Toutes les données actuellement dans la mémoire de l'émulateur seront écrasées.
émulateurs: scriptpath d'exécution Exécutez le script sur scriptpath après avoir démarré les émulateurs pour les produits Firebase configurés dans firebase.json . Les processus de l'émulateur s'arrêteront automatiquement une fois l'exécution du script terminée.
Drapeau Description
--only Facultatif. Limitez les émulateurs qui démarrent. Fournissez une liste de noms d'émulateurs séparés par des virgules, en spécifiant un ou plusieurs des noms suivants : "firestore", "base de données", "fonctions", "hébergement" ou "pubsub".
--inspect-functions debug_port Facultatif. À utiliser avec l'émulateur Cloud Functions pour activer le débogage du point d'arrêt des fonctions sur le port spécifié (ou sur le port par défaut 9229 si l'argument est omis). Notez que lorsque cet indicateur est fourni, l'émulateur Cloud Functions passe à un mode d'exécution sérialisé spécial dans lequel les fonctions sont exécutées en un seul processus, dans un ordre séquentiel (FIFO) ; cela simplifie le débogage des fonctions, bien que le comportement diffère de l'exécution parallèle et multi-processus de fonctions dans le cloud.
--export-on-exit= Facultatif. À utiliser avec l'émulateur Authentification, Cloud Firestore, Realtime Database ou Cloud Storage for Firebase. Demandez au(x) émulateur(s) d'exporter les données vers un répertoire lors de l'arrêt, comme décrit pour la commande emulators:export . Le répertoire d'exportation peut être spécifié avec cet indicateur : firebase emulators:start --export-on-exit=./saved-data . Si --import est utilisé, le chemin d'exportation est le même par défaut ; par exemple : firebase emulators:start --import=./data-path --export-on-exit . Enfin, si vous le souhaitez, transmettez différents chemins de répertoire aux indicateurs --import et --export-on-exit .
--import= import_directory Facultatif. À utiliser avec l'émulateur Authentification, Cloud Firestore, Realtime Database ou Cloud Storage for Firebase. Importez les données enregistrées à l'aide de l'option de démarrage --export-on-exit ou de la commande emulators:export vers une instance d'émulateur d'authentification, Cloud Firestore, Realtime Database ou Cloud Storage pour Firebase en cours d'exécution. Toutes les données actuellement dans la mémoire de l'émulateur seront écrasées.
--ui Facultatif. Exécutez l’interface utilisateur de l’émulateur pendant l’exécution.

La méthode firebase emulators:exec est généralement plus appropriée pour les workflows d'intégration continue.

Exporter et importer des données d'émulateur

Vous pouvez exporter des données à partir des émulateurs d'authentification, Cloud Firestore, Realtime Database et Cloud Storage pour Firebase pour les utiliser comme ensemble de données de référence communes et partageables. Ces ensembles de données peuvent être importés à l'aide de l'indicateur --import , comme décrit ci-dessus.

émulateurs:export export_directory

Authentification, Cloud Firestore, base de données en temps réel ou émulateur Cloud Storage pour Firebase . Exportez des données à partir d'une instance d'émulateur Cloud Firestore, Realtime Database ou Cloud Storage pour Firebase en cours d'exécution. Le export_directory spécifié sera créé s'il n'existe pas déjà. Si le répertoire spécifié existe, vous serez invité à confirmer que les données d'exportation précédentes doivent être écrasées. Vous pouvez ignorer cette invite en utilisant l'indicateur --force . Le répertoire d'exportation contient un fichier manifeste de données, firebase-export-metadata.json .

Vous pouvez demander aux émulateurs d'exporter automatiquement les données lorsqu'ils s'arrêtent à l'aide des indicateurs --export-on-exit décrits ci-dessus.

Intégrez-vous à votre système CI

Exécution d’images conteneurisées Emulator Suite

L'installation et la configuration d'Emulator Suite avec des conteneurs dans une configuration CI typique sont simples.

Il y a quelques problèmes à noter :

  • Les fichiers JAR sont installés et mis en cache dans ~/.cache/firebase/emulators/ .

    • Vous souhaiterez peut-être ajouter ce chemin à votre configuration de cache CI pour éviter les téléchargements répétés.
  • Si vous n'avez pas de fichier firebase.json dans votre référentiel, vous devez ajouter un argument de ligne de commande à la commande emulators:start ou emulators:exec pour spécifier quels émulateurs doivent être démarrés. Par exemple,
    --only functions,firestore .

Générer un jeton d'authentification (émulateur d'hébergement uniquement)

Si vos workflows d'intégration continue reposent sur Firebase Hosting , vous devrez alors vous connecter à l'aide d'un jeton afin d'exécuter firebase emulators:exec . Les autres émulateurs ne nécessitent pas de connexion.

Pour générer un jeton, exécutez firebase login:ci sur votre environnement local ; cela ne doit pas être effectué à partir d’un système CI. Suivez les instructions pour vous authentifier. Vous ne devriez avoir besoin d'effectuer cette étape qu'une seule fois par projet, car le jeton sera valide dans toutes les versions. Le jeton doit être traité comme un mot de passe ; assurez-vous que cela reste secret.

Si votre environnement CI vous permet de spécifier des variables d'environnement pouvant être utilisées dans les scripts de build, créez simplement une variable d'environnement appelée FIREBASE_TOKEN , dont la valeur est la chaîne du jeton d'accès. La CLI Firebase récupérera automatiquement la variable d'environnement FIREBASE_TOKEN et les émulateurs démarreront correctement.

En dernier recours, vous pouvez simplement inclure le jeton dans votre script de build, mais assurez-vous que les parties non fiables n'y ont pas accès. Pour cette approche codée en dur, vous pouvez ajouter --token "YOUR_TOKEN_STRING_HERE" à la commande firebase emulators:exec .

Utiliser l'API REST d'Emulator Hub

Liste des émulateurs en cours d'exécution

Pour répertorier les émulateurs en cours d’exécution, envoyez une requête GET au point de terminaison /emulators de Emulator Hub.

curl localhost:4400/emulators

Le résultat sera un objet JSON répertoriant tous les émulateurs en cours d'exécution et leur configuration hôte/port, par exemple :

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

Activer/désactiver les déclencheurs de fonctions en arrière-plan

Dans certaines situations, vous devrez désactiver temporairement les déclencheurs de fonctions et d'extensions locales. Par exemple, vous souhaiterez peut-être supprimer toutes les données de l'émulateur Cloud Firestore sans déclencher les fonctions onDelete exécutées dans les émulateurs Cloud Functions ou Extensions.

Pour désactiver temporairement les déclencheurs de fonctions locales, envoyez une requête PUT au point de terminaison /functions/disableBackgroundTriggers de Emulator Hub.

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

Le résultat sera un objet JSON détaillant l'état actuel.

{
  "enabled": false
}

Pour activer les déclencheurs de fonctions locales après leur désactivation, envoyez une requête PUT au point de terminaison /functions/enableBackgroundTriggers de Emulator Hub.

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

Le résultat sera un objet JSON détaillant l'état actuel.

{
  "enabled": true
}

Intégrations du SDK d'émulateur

Les tableaux de cette section indiquent quels émulateurs sont pris en charge par les SDK client et Admin. L'avenir signifie que la prise en charge de l'émulateur est prévue mais pas encore disponible.

Disponibilité du SDK client

Android Plateformes Apple la toile Interface utilisateur de Firebase
Android
Interface utilisateur de Firebase
IOS
Interface utilisateur de Firebase
la toile
Base de données en temps réel 19.4.0 7.2.0 8.0.0 6.4.0 Avenir N / A
Cloud Firestore 21.6.0 7.2.0 8.0.0 6.4.0 Avenir N / A
Authentification 20.0.0 7.0.0 8.0.0 7.0.0 Avenir 4.7.2
Stockage cloud pour Firebase 20.0.0 8.0.0 8.4.0 7.0.0 11.0.0 N / A
Fonctions cloud 19.1.0 7.2.0 8.0.0 N / A N / A N / A
Hébergement N / A N / A N / A N / A N / A N / A
Rallonges N / A N / A N / A N / A N / A N / A

Disponibilité du SDK d'administration

Nœud Java Python Aller
Base de données en temps réel 8.6.0 6.10.0 2.18.0 Avenir
Cloud Firestore 8.0.0 6.10.0 3.0.0 1.0.0
Authentification 9.3.0 7.2.0 5.0.0 4.2.0
Stockage cloud pour Firebase 9.8.0 Avenir Avenir Avenir
Fonctions cloud N / A N / A N / A N / A
Hébergement N / A N / A N / A N / A
Rallonges N / A N / A N / A N / A