Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Instala, configura e integra Local Emulator Suite

Firebase Local Emulator Suite se puede instalar y configurar para diferentes entornos de prototipado y realización de pruebas. Esto incluye desde sesiones únicas de creación de prototipos hasta flujos de trabajo de integración continua a escala de producción.

Instala Local Emulator Suite

Antes de instalar Emulator Suite, necesitarás lo siguiente:

  • Node.js (versión 8.0 o una posterior)
  • Java (versión 1.8 o una posterior)

Sigue estas instrucciones para instalar Emulator Suite:

  1. Instala Firebase CLI. Si aún no lo has hecho, instálalo ahora. Necesitarás la versión 8.14.0 o una posterior para usar Emulator Suite. Ejecuta el siguiente comando para verificar la versión que tienes instalada:
    firebase --version
  2. Si aún no lo has hecho, inicializa el directorio de trabajo actual como un proyecto de Firebase y sigue las indicaciones en pantalla para especificar los productos que usarás:
    firebase init
  3. Configura Emulator Suite. Este comando inicia un asistente de configuración que te permite seleccionar emuladores de interés, descargar los archivos binarios correspondientes del emulador y establecer puertos para el emulador si los valores predeterminados no son adecuados.
    firebase init emulators

Una vez que se instale un emulador, no se realizarán verificaciones de actualizaciones ni descargas automáticas adicionales hasta que actualices la versión de Firebase CLI.

Configura Emulator Suite

De forma opcional, puedes configurar los puertos de red y la ruta de acceso de los emuladores a las definiciones de las reglas de seguridad en el archivo firebase.json:

  • Ejecuta firebase init emulators o edita firebase.json de forma manual para cambiar los puertos del emulador.
  • Edita firebase.json manualmente para cambiar la ruta de acceso a las definiciones de las reglas de seguridad.

Si no estableces esta configuración, los emuladores escucharán en sus puertos predeterminados, y los emuladores de Cloud Firestore, Realtime Database y Cloud Storage se ejecutarán con seguridad de datos abierta.

Comando Descripción
Emuladores de init Inicia un asistente de inicialización de emulador. Identifica los emuladores que se instalarán y, si quieres, especifica la configuración de los puertos. init emulators no es destructivo, por lo que aceptar los valores predeterminados conservará la configuración actual del emulador.

Configuración de puertos

Cada emulador se vincula a un puerto diferente en tu máquina con un valor predeterminado preferido.

Emulador Puerto predeterminado
Authentication 9099
IU de Emulator Suite 4000
Cloud Functions 5001
Realtime Database 9000
Cloud Firestore 8080
Cloud Storage 9199
Firebase Hosting 5000
Pub/Sub 8085

Configuración de reglas de seguridad

Los emuladores obtendrán la configuración de las reglas de seguridad de las claves de configuración database, firestore y storage en 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": {
    "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"
    }
  }
}

Inicia los emuladores

Puedes iniciar los emuladores para que se ejecuten hasta que se cierren de forma manual o para que se ejecuten durante una secuencia de comandos de prueba designada y se cierren automáticamente.

Comando Descripción
emulators:start Inicia los emuladores de productos de Firebase que se configuraron en firebase.json. Los procesos del emulador seguirán ejecutándose hasta que se detengan de forma explícita. Si se llama a emulators:start, los emuladores se descargarán en ~/.cache/firebase/emulators/ si aún no se instalaron.
Marca Descripción
--only Opcional. Limita los emuladores que se inician. Proporciona una lista de nombres de emuladores separada por comas, en la que se especifiquen una o más entradas de “auth”, “database”, “firestore”, “functions”, “hosting” o “pubsub”.
--inspect-functions debug_port Opcional. Se utiliza con el emulador de Cloud Functions para habilitar la depuración de puntos de interrupción de las funciones en un puerto específico (o el puerto predeterminado 9229 si se omite el argumento). Recuerda que cuando se proporciona esta marca, el emulador de Cloud Functions cambia a un modo especial de ejecución en serie en el que las funciones se ejecutan en un solo proceso y en orden secuencial (FIFO). Esto simplifica la depuración de funciones; sin embargo, el comportamiento difiere de la ejecución paralela y de varios procesos de las funciones en la nube.
--export-on-exit= Opcional. Se utiliza con el emulador de Authentication, Cloud Firestore, Realtime Database o Cloud Storage. Indica a los emuladores que exporten datos a un directorio cuando se produzca el cierre, como se describe en el comando emulators:export. El directorio de exportación se puede especificar con la marca firebase emulators:start --export-on-exit=./saved-data. Si se usa --import, la ruta de exportación predeterminada es la misma. Por ejemplo: firebase emulators:start --import=./data-path --export-on-exit. Por último, si lo deseas, pasa diferentes rutas de directorio a las marcas --import y --export-on-exit.
--import=import_directory Opcional. Se utiliza con el emulador de Authentication, Cloud Firestore, Realtime Database o Cloud Storage. Importa los datos guardados con la opción de inicio --export-on-exit o el comando emulators:export a una instancia en ejecución del emulador de Authentication, Cloud Firestore, Realtime Database o Cloud Storage. Se reemplazarán todos los datos que se encuentren en la memoria del emulador.
emulators:exec scriptpath Ejecuta la secuencia de comandos ubicada en scriptpath después de iniciar los emuladores de los productos de Firebase que se configuraron en firebase.json. Los procesos del emulador se detendrán automáticamente cuando la secuencia de comandos haya terminado de ejecutarse.
Marca Descripción
--only Opcional. Limita los emuladores que se inician. Proporciona una lista de nombres de emuladores separada por comas, en la que se especifican una o más entradas de “firestore”, “database”, “functions”, “hosting” o “pubsub”.
--inspect-functions debug_port Opcional. Se utiliza con el emulador de Cloud Functions para habilitar la depuración de puntos de interrupción de las funciones en un puerto específico (o el puerto predeterminado 9229 si se omite el argumento). Recuerda que cuando se proporciona esta marca, el emulador de Cloud Functions cambia a un modo especial de ejecución en serie en el que las funciones se ejecutan en un solo proceso y en orden secuencial (FIFO). Esto simplifica la depuración de funciones; sin embargo, el comportamiento difiere de la ejecución paralela y de varios procesos de las funciones en la nube.
--export-on-exit= Opcional. Se utiliza con el emulador de Authentication, Cloud Firestore, Realtime Database o Cloud Storage. Indica a los emuladores que exporten datos a un directorio cuando se produzca el cierre, como se describe en el comando emulators:export. El directorio de exportación se puede especificar con la marca firebase emulators:start --export-on-exit=./saved-data. Si se usa --import, la ruta de exportación predeterminada es la misma. Por ejemplo: firebase emulators:start --import=./data-path --export-on-exit. Por último, si lo deseas, pasa diferentes rutas de directorio a las marcas --import y --export-on-exit.
--import=import_directory Opcional. Se utiliza con el emulador de Authentication, Cloud Firestore, Realtime Database o Cloud Storage. Importa los datos guardados con la opción de inicio --export-on-exit o el comando emulators:export a una instancia en ejecución del emulador de Authentication, Cloud Firestore, Realtime Database o Cloud Storage. Se reemplazarán todos los datos que se encuentren en la memoria del emulador.
--ui Opcional. Ejecuta la IU del emulador durante la ejecución.

Por lo general, el método firebase emulators:exec es más apropiado para los flujos de trabajo de integración continua.

Importa y exporta datos de emulador

Puedes exportar datos desde los emuladores de Authentication, Cloud Firestore, Realtime Database y Cloud Storage para usarlos como un conjunto de datos de referencia común que se puede compartir. Estos conjuntos de datos pueden importarse con la marca --import, como se describió anteriormente.

emulators:export export_directory

Emulador de Authentication, Cloud Firestore, Realtime Database o Cloud Storage. Exporta datos desde una instancia del emulador de Cloud Firestore, Realtime Database o Cloud Storage en ejecución. Se creará el export_directory especificado si es que no existe. Si el directorio especificado existe, se te pedirá que confirmes el reemplazo de los datos de exportación anteriores. Puedes omitir este mensaje con la marca --force. El directorio de exportación contiene un archivo de manifiesto de datos, firebase-export-metadata.json.

Con las marcas --export-on-exit descritas anteriormente, puedes indicarles a los emuladores que exporten datos de forma automática cuando se cierren.

Integra en tu sistema de CI

Ejecuta imágenes de Emulator Suite en contenedores

La instalación y configuración de Emulator Suite con contenedores en un entorno típico de CI es sencilla.

Estos son algunos problemas que debes tener en cuenta:

  • Los archivos JAR se instalan y almacenan en caché en ~/.cache/firebase/emulators/.

    • Recomendamos agregar esta ruta de acceso a la configuración de caché de la CI para evitar que se repitan las descargas.
  • Si no tienes un archivo firebase.json en tu repositorio, debes agregar un argumento de línea de comandos a los comandos emulators:start o emulators:exec para especificar los emuladores que se deben iniciar. Por ejemplo,
    --only functions,firestore

Genera un token de autenticación (solo en el emulador de Hosting)

Si tus flujos de trabajo de integración continua dependen de Firebase Hosting, deberás acceder con un token para ejecutar firebase emulators:exec. Los otros emuladores no requieren acceso.

Para generar un token, ejecuta firebase login:ci en tu entorno local. Esta acción no debe realizarse desde un sistema de CI. Sigue las instrucciones para realizar la autenticación. Puesto que el token será válido en todas las versiones, solo debes realizar este paso una vez por proyecto. El token se debe tratar como si fuera una contraseña, así que asegúrate de mantenerlo en secreto.

Si el entorno de CI te permite especificar variables de entorno que se pueden usar en las secuencias de comandos de la versión, solo crea una variable de entorno que se llame FIREBASE_TOKEN y que el valor sea la string del token de acceso. Firebase CLI detectará automáticamente la variable de entorno FIREBASE_TOKEN, y los emuladores se iniciarán de forma correcta.

Como último recurso, puedes incluir el token en tu secuencia de comandos de compilación, pero asegúrate de que los terceros no confiables no tengan acceso. Para este enfoque hard-coded, puedes agregar --token "YOUR_TOKEN_STRING_HERE" al comando firebase emulators:exec.

Usa la API de REST de Emulator Hub

Obtén una lista de los emuladores en ejecución

Para ver una lista de los emuladores que se están ejecutando, envía una solicitud GET al extremo /emulators de Emulator Hub.

curl localhost:4400/emulators

El resultado será un objeto JSON que muestra todos los emuladores en ejecución, como también su configuración de host y puerto. Por ejemplo:

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

Habilita o inhabilita activadores de funciones en segundo plano

En algunas situaciones, deberás inhabilitar temporalmente los activadores de funciones locales. Por ejemplo, recomendamos que borres todos los datos del emulador de Cloud Firestore sin activar ninguna función onDelete que se ejecute en el emulador de Cloud Functions.

Para inhabilitar temporalmente los activadores de funciones locales, envía una solicitud PUT al extremo /functions/disableBackgroundTriggers de Emulator Hub.

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

El resultado será un objeto JSON que detallará el estado actual.

{
  "enabled": false
}

Para habilitar los activadores de funciones locales después de que se hayan inhabilitado, envía una solicitud PUT al extremo /functions/enableBackgroundTriggers de Emulator Hub.

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

El resultado será un objeto JSON que detallará el estado actual.

{
  "enabled": true
}

Integraciones del SDK del emulador

Las tablas de esta sección indican qué emuladores son compatibles con los SDK cliente y de Admin. Futuro significa que la compatibilidad con el emulador está planificada, pero aún no se encuentra disponible.

Disponibilidad del SDK cliente

Android iOS Web IU de Firebase
Android
IU de Firebase
iOS
IU de Firebase
Web
Realtime Database 19.4.0 7.2.0 8.0.0 6.4.0 Futuro N/A
Cloud Firestore 21.6.0 7.2.0 8.0.0 6.4.0 Futuro N/A
Authentication 20.0.0 7.0.0 8.0.0 7.0.0 Futuro Futuro
Cloud Storage 20.0.0 8.0.0 8.4.0 N/A N/A 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

Disponibilidad del SDK de Admin

Node Java Python Go
Realtime Database 8.6.0 6.10.0 2.18.0 Futuro
Cloud Firestore 8.0.0 6.10.0 3.0.0 1.0.0
Authentication 9.3.0 Futuro Futuro Futuro
Cloud Storage 9.8.0 Futuro Futuro Futuro
Cloud Functions N/A N/A N/A N/A
Hosting N/A N/A N/A N/A