La suite d'émulateurs locaux Firebase peut être installée et configurée pour différents environnements de prototypes et de tests, des sessions de prototypage uniques aux workflows d'intégration continue à l'échelle de la production.
Installer la suite d'émulateurs locaux
Avant d'installer Emulator Suite, vous aurez besoin de :
Pour installer la suite d'émulateurs :
- Installez l' interface de ligne de commande Firebase . Si vous n'avez pas encore installé la CLI Firebase, 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
- 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
- Configurez la suite d'émulateurs. Cette commande lance 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 qu'un émulateur est installé, aucune vérification de mise à jour n'est effectuée et aucun téléchargement automatique supplémentaire n'aura lieu tant que vous n'aurez pas mis à jour votre version de la CLI Firebase.
Configurer la suite d'émulateurs
Vous pouvez éventuellement configurer les ports réseau des émulateurs et le chemin d'accès aux définitions des 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 manuellementfirebase.json
. - Modifiez le chemin d'accès aux définitions des 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 la sécurité des données ouvertes.
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 de port de l'émulateur. init emulators est non destructif ; 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 sur 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'émulateurs | 4000 |
Fonctions cloud | 5001 |
Arc d'événement | 9299 |
Base de données en temps réel | 9000 |
Cloud Firestore | 8080 |
Stockage en nuage pour Firebase | 9199 |
Hébergement Firebase | 5000 |
Pub/sous-marin | 8085 |
Configuration de l'identifiant du 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 toutes les invocations 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 ignorer ce comportement en définissant la clé singleProjectMode
sur false
dans votre firebase.json
.
Vous pouvez vérifier si les déclarations d'ID de projet ne correspondent pas dans :
- Le projet par défaut dans la ligne de commande. Par défaut, l'ID du projet sera pris au démarrage du projet sélectionné avec
firebase init
oufirebase use
. Pour afficher la liste des projets (et voir lequel est sélectionné), utilisezfirebase projects:list
. - Tests unitaires de règles. L'ID de projet est souvent spécifié dans les appels aux méthodes de la bibliothèque de tests unitaires de règles
initializeTestEnvironment
ouinitializeTestApp
. - L'indicateur
--project
de la 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 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 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 drapeaux 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 Emulator Suite.
Démarrer des é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 de l'émulateur continueront à s'exécuter jusqu'à ce qu'ils soient explicitement arrêtés. Appeler emulators:start téléchargera les émulateurs sur ~/.cache/firebase/emulators/ s'ils ne sont pas déjà installés.
| ||||||||||||
émulateurs: scriptpath exec | 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 lorsque le script aura fini de s'exécuter.
|
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 depuis les émulateurs Authentication, Cloud Firestore, Realtime Database et Cloud Storage pour Firebase afin de les utiliser comme un ensemble de données de référence commun et partageable. 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 Cloud Storage pour l'émulateur Firebase . Exportez des données à partir d'une instance d'émulateur Cloud Firestore, Realtime Database ou Cloud Storage for Firebase en cours d'exécution. Le Vous pouvez demander aux émulateurs d'exporter automatiquement les données lorsqu'ils s'arrêtent en utilisant les indicateurs |
Intégration avec votre système CI
Exécution d'images Emulator Suite conteneurisées
L'installation et la configuration de la suite d'émulateurs 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 pouvez 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 commandeemulators:start
ouemulators: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 flux de travail d'intégration continue reposent sur Firebase Hosting , vous devrez 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 pour toutes les versions. Le jeton doit être traité comme un mot de passe ; assurez-vous qu'il est gardé secret.
Si votre environnement CI vous permet de spécifier des variables d'environnement pouvant être utilisées dans les scripts de génération, créez simplement une variable d'environnement appelée FIREBASE_TOKEN
, la valeur étant 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 génération, 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 Emulator Hub
Lister les é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
du concentrateur d'émulateurs.
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 fonction d'arrière-plan
Dans certaines situations, vous devrez désactiver temporairement la fonction locale et les déclencheurs d'extension. Par exemple, vous pouvez supprimer toutes les données de l'émulateur Cloud Firestore sans déclencher les fonctions onDelete
qui s'exécutent dans les émulateurs Cloud Functions ou Extensions.
Pour désactiver temporairement les déclencheurs de fonction locaux, envoyez une demande PUT
au point de terminaison /functions/disableBackgroundTriggers
du concentrateur d'émulation.
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 fonction locaux après leur désactivation, envoyez une requête PUT
au point de terminaison /functions/enableBackgroundTriggers
du concentrateur d'émulation.
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 de l'émulateur
Les tableaux de cette section indiquent les émulateurs pris en charge par les SDK client et administrateur. 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 Firebase Android | Interface utilisateur Firebase iOS | Interface utilisateur 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 en nuage 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 en nuage 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 |