Installer, configurer et intégrer la suite d'émulateurs locaux

La suite d'émulateurs locaux Firebase peut être installée et configurée pour différents des environnements de prototype et de test, qu'il s'agisse de sessions de prototypage ponctuelles, d'intégration continue à l'échelle de la production.

Installer la suite d'émulateurs locaux

Avant d'installer la suite d'émulateurs, vous devez disposer des éléments suivants:

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

Pour installer la suite d'émulateurs :

  1. Installez la CLI Firebase. Si la CLI Firebase n'est pas déjà installée, l'installer maintenant. Vous aurez besoin de la version 8.14.0 ou ultérieure de la CLI pour utiliser la suite d'émulateurs. Vous pouvez Vérifiez la version que 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 instructions à l'écran pour spécifier produits à utiliser:
    firebase init
  3. Configurez la suite d'émulateurs. Cette commande lance un assistant de configuration qui vous permet de sélectionner les émulateurs qui vous intéressent et de télécharger l'émulateur correspondant fichiers binaires, et définissez les ports de l'émulateur si les valeurs par défaut ne sont pas appropriées.
    firebase init emulators

Une fois l'émulateur installé, aucune vérification des mises à jour n'est effectuée et aucune les téléchargements automatiques seront effectués jusqu'à ce que vous mettiez à jour la version de la CLI Firebase.

Configurer la suite d'émulateurs

Vous pouvez éventuellement configurer le paramètre ports réseau et chemin d'accès Définitions des règles dans le fichier firebase.json:

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

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

Commande Description
Émulateurs init Lancez un assistant d'initialisation de l'émulateur. Identifiez les émulateurs à installer et spécifiez éventuellement les paramètres de port de l'émulateur. init emulators n'est pas destructeur ; si vous acceptez les valeurs par défaut, la configuration actuelle de l'émulateur sera conservée.

Configuration du port

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
Authentication 9099
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

Configuration de l'ID de projet

Selon la manière dont vous appelez les émulateurs, vous pouvez exécuter plusieurs instances d'un émulateur utilisant différents ID de projet Firebase ou plusieurs instances d'émulateur pour un ID de projet donné. Dans ce 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 émulateurs. les appels, de sorte que le Emulator Suite UI, les différents émulateurs de produits les instances en cours d'exécution d'un émulateur peuvent communiquer correctement dans toutes cas d'utilisation.

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

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

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

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

Configuration des règles de sécurité

Les émulateurs récupèrent la configuration des règles de sécurité à partir de database, Clés de configuration 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écifier des options Java

L'émulateur Realtime Database, l'émulateur Cloud Firestore et une partie de L'émulateur Cloud Storage for Firebase est basé sur Java et 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 de mémoire Java, vous pouvez augmenter la taille maximale du tas de mémoire Java à 4 Go:

export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start

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

Démarrer les émulateurs

Vous pouvez démarrer les émulateurs pour qu'ils s'exécutent jusqu'à leur arrêt manuel d'un script de test désigné, puis s'arrête automatiquement.

Commande Description
emulators:début Démarrez les émulateurs pour les produits Firebase configurés dans firebase.json. Les processus de l'émulateur continueront de s'exécuter jusqu'à ce qu'ils soient explicitement arrêtés. Appel en cours emulators:start téléchargera les émulateurs dans ~/.cache/firebase/emulators/ si elles ne sont pas déjà installées.
Drapeau Description
--only Facultatif. Limite quels émulateurs démarrent. Fournissez une liste de noms d'émulateurs séparés par une virgule, en spécifiant un ou plus de "auth", "database", "firestore", "functions", "hosting" ou "pubsub".
--inspect-functions debug_port Facultatif. À utiliser avec l'émulateur Cloud Functions pour activer le débogage des points d'arrêt des fonctions sur le port spécifié (ou le port par défaut 9229 si l'argument est omis). Notez que lorsque cet indicateur est fourni, l'émulateur Cloud Functions passe à mode d'exécution sérialisé spécial dans lequel les fonctions sont exécutées en un seul processus, dans ordre séquentiel (FIFO) ; cela simplifie le débogage des fonctions, bien que le comportement diffère de l'exécution parallèle multiprocessus de fonctions dans le cloud.
--export-on-exit= Facultatif. À utiliser avec l'émulateur Authentication, Cloud Firestore, Realtime Database ou Cloud Storage for Firebase. Demandez aux émulateurs d'exporter les données vers un lors de l'arrêt, comme décrit pour le emulators:export . Le répertoire d'exportation peut être spécifié avec l'option suivante : 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 d'accès au répertoire à --import et options --export-on-exit.
--import=import_directory Facultatif. À utiliser avec Authentication, Cloud Firestore, Realtime Database ou Cloud Storage for Firebase. Importez les données enregistrées à l'aide de la l'option de démarrage --export-on-exit ou emulators:export ; à un Authentication, Cloud Firestore, Realtime Database en cours d'exécution ou Instance d'émulateur Cloud Storage for Firebase. Toutes les données actuellement dans la mémoire de l'émulateur seront déjantés.
emulators:exec scriptpath Exécutez le script à scriptpath après avoir démarré les émulateurs pour les produits Firebase configurés dans firebase.json. Les processus de l'émulateur s'arrêtent automatiquement lorsque de ce script a fini de s'exécuter.
Drapeau Description
--only Facultatif. Limitez les émulateurs qui démarrent. Fournissez une liste de noms d'émulateurs séparés par une virgule, en spécifiant un ou plus de "firestore", "database", "functions", "hosting" ou "pubsub".
--inspect-functions debug_port Facultatif. Utilisation avec L'émulateur Cloud Functions permet de déboguer les points d'arrêt des fonctions au niveau port spécifié (ou le port par défaut 9229 si l'argument est omis). Notez que lorsque cette est fourni, l'émulateur Cloud Functions passe à une version spéciale sérialisée mode d'exécution dans lequel les fonctions sont exécutées en un seul processus, dans ordre séquentiel (FIFO) cela simplifie le débogage des fonctions, bien que le comportement diffère de l'exécution parallèle multiprocessus de fonctions dans le cloud.
--export-on-exit= Facultatif. À utiliser avec Authentication, Cloud Firestore, Realtime Database ou Cloud Storage for Firebase. Indique aux émulateurs 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 par défaut le même. Par exemple: firebase emulators:start --import=./data-path --export-on-exit Enfin, si vous le souhaitez, transmettez différents chemins d'accès au répertoire à --import et options --export-on-exit.
--import=import_directory Facultatif. À utiliser avec Authentication, Cloud Firestore, Realtime Database ou Cloud Storage for Firebase. Importez les données enregistrées à l'aide de la l'option de démarrage --export-on-exit ou emulators:export ; à un Authentication, Cloud Firestore, Realtime Database en cours d'exécution ou Instance d'émulateur Cloud Storage for Firebase. Toutes les données actuellement dans la mémoire de l'émulateur sera écrasé.
--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 adaptée aux workflows d'intégration continue.

Exporter et importer des données d'émulateur

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

emulators:exportation export_directory

Émulateur Authentication, Cloud Firestore, Realtime Database ou Cloud Storage for Firebase. Exporter des données à partir d'un Cloud Firestore, d'un Realtime Database ou d'un Cloud Storage for Firebase en cours d'exécution l'instance de l'émulateur. Le export_directory spécifié sera créé si c'est le cas. n'existent pas encore. Si le répertoire spécifié existe, vous êtes invité à confirmer que les données d'exportation précédentes doivent être écrasées. Vous pouvez ignorer cette invite à l'aide des --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 de la options --export-on-exit décrites ci-dessus.

Intégrer votre système CI

Exécuter des images de la suite d'émulateurs conteneurisées

Installation et configuration de la suite d'émulateurs avec des conteneurs dans un la configuration CI classique est simple.

Quelques points sont à noter:

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

    • Vous pouvez ajouter ce chemin d'accès à la configuration de votre cache CI pour éviter des téléchargements répétés.
  • Si votre dépôt ne contient pas de fichier firebase.json, vous devez ajouter un l'argument de ligne de commande à la commande emulators:start ou emulators:exec pour spécifier les émulateurs à démarrer. 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 devez vous connecter à l'aide d'un jeton pour exécuter firebase emulators:exec. La 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 n'avez besoin d'effectuer cette étape qu'une seule fois par projet, car le jeton sera valide d'une compilation à l'autre. Le jeton doit être traité comme un mot de passe. s’assurer qu’elle reste secrète.

Si votre environnement CI vous permet de spécifier des variables d'environnement utilisées dans les scripts de compilation, il vous suffit de créer une variable d'environnement appelée FIREBASE_TOKEN, dont la valeur correspond à la chaîne du jeton d'accès. CLI Firebase récupère 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 compilation, mais assurez-vous que les parties non approuvées 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 de l'émulateur

Répertorier les émulateurs en cours d'exécution

Pour répertorier les émulateurs en cours d'exécution, envoyez une requête GET au /emulators. du hub d'émulateurs.

curl localhost:4400/emulators

Le résultat est un objet JSON listant 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 la fonction d'arrière-plan

Dans certains cas, vous devrez désactiver temporairement la fonction locale et les déclencheurs d'extension. Par exemple, vous pouvez supprimer toutes les données l'émulateur Cloud Firestore sans déclencher de fonction onDelete qui s'exécutent dans les émulateurs Cloud Functions ou Extensions.

Pour désactiver temporairement les déclencheurs de fonction locale, envoyez une requête PUT au Point de terminaison /functions/disableBackgroundTriggers du hub de l'émulateur.

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

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

{
  "enabled": false
}

Pour activer les déclencheurs de fonction locale après leur désactivation, envoyez un PUT au point de terminaison /functions/enableBackgroundTriggers de l'émulateur Hub.

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

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

{
  "enabled": true
}

Intégrations du SDK de l'émulateur

Les tableaux de cette section indiquent les émulateurs compatibles avec le client et les SDK Admin. Future signifie que la compatibilité de l'émulateur est prévue, mais pas encore. disponibles.

Disponibilité du SDK client

Android Plates-formes Apple Web Interface utilisateur de Firebase
Android
Interface utilisateur de Firebase
iOS
Interface utilisateur de Firebase
Web
Realtime Database 19.4.0 7.2.0 8.0.0 6.4.0 Futur N/A
Cloud Firestore 21.6.0 7.2.0 8.0.0 6.4.0 Futur N/A
Authentication 20.0.0 7.0.0 8.0.0 7.0.0 Futur 4.7.2
Cloud Storage for Firebase 20.0.0 8.0.0 8.4.0 7.0.0 11.0.0 N/A
Cloud Functions 19.1.0 7.2.0 8.0.0 N/A N/A N/A
Hosting N/A N/A N/A N/A N/A N/A
Extensions N/A N/A N/A N/A N/A N/A

Disponibilité du SDK Admin

Nœud Java Python Go
Realtime Database 8.6.0 6.10.0 2.18.0 Futur
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 Futur Futur Futur
Cloud Functions N/A N/A N/A N/A
Hosting N/A N/A N/A N/A
Extensions N/A N/A N/A N/A