Entérate de todos los anuncios de Firebase Summit y descubre cómo Firebase puede ayudarte a acelerar el desarrollo de las apps y a ejecutarlas con confianza. Más información

Instale, configure e integre Local Emulator Suite

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

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

Instale el conjunto de emuladores locales

Antes de instalar Emulator Suite, necesitará:

  • Node.js versión 8.0 o superior.
  • Java JDK versión 11 o superior.

Para instalar el paquete de emuladores:

  1. Instale la CLI de Firebase . Si aún no tiene Firebase CLI instalado, instálelo ahora . Necesitará la versión CLI 8.14.0 o superior para usar Emulator Suite. Puede verificar qué versión tiene instalada usando el siguiente comando:
    firebase --version
  2. Si aún no lo ha hecho, inicialice el directorio de trabajo actual como un proyecto de Firebase, siguiendo las indicaciones en pantalla para especificar qué productos usar:
    firebase init
  3. Configure la Suite del emulador. Este comando inicia un asistente de configuración que le permite seleccionar los emuladores de interés, descargar los archivos binarios del emulador correspondiente y configurar los puertos del emulador si los valores predeterminados no son apropiados.
    firebase init emulators

Una vez que se instala un emulador, no se realizan comprobaciones de actualización y no se realizarán descargas automáticas adicionales hasta que actualice su versión de Firebase CLI.

Configurar el paquete de emuladores

Opcionalmente, puede configurar los puertos de red de los emuladores y la ruta a las definiciones de las reglas de seguridad en el archivo firebase.json :

  • Cambie los puertos del emulador ejecutando firebase init emulators o editando firebase.json manualmente.
  • Cambie la ruta a las definiciones de las reglas de seguridad editando firebase.json manualmente.

Si no configura estas configuraciones, los emuladores escucharán en sus puertos predeterminados y los emuladores Cloud Firestore, Realtime Database y Cloud Storage para Firebase se ejecutarán con seguridad de datos abierta.

Dominio Descripción
emuladores de inicio Inicie un asistente de inicialización del emulador. Identifique los emuladores que se instalarán y, opcionalmente, especifique la configuración del puerto del emulador. init emulators no es destructivo; aceptar los valores predeterminados conservará la configuración actual del emulador.

Configuración de puertos

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

emulador Puerto predeterminado
Autenticación 9099
Interfaz de usuario del conjunto de emuladores 4000
Funciones en la nube 5001
Eventarc 9299
Base de datos en tiempo real 9000
Tienda de fuego en la nube 8080
Almacenamiento en la nube para Firebase 9199
Alojamiento de base de fuego 5000
publicación/suscripción 8085

Configuración de ID de proyecto

Según cómo invoque los emuladores, puede ejecutar varias instancias de un emulador con diferentes ID de proyecto de Firebase o varias instancias de emulador para una ID de proyecto determinada. En tales casos, las instancias del emulador se ejecutan en un entorno separado.

Por lo general, es una buena práctica establecer un ID de proyecto para todas las invocaciones del emulador, de modo que la interfaz de usuario de Emulator Suite, los diferentes emuladores de productos y todas las instancias en ejecución de un emulador en particular puedan comunicarse correctamente en todos los casos.

Local Emulator Suite emite advertencias cuando detecta varios ID de proyecto en el entorno, aunque puede anular este comportamiento configurando la clave singleProjectMode en false en su firebase.json .

Puede verificar la(s) declaración(es) de ID del proyecto en busca de discrepancias en:

  • El proyecto predeterminado en la línea de comandos. De forma predeterminada, el ID del proyecto se tomará al inicio del proyecto seleccionado con firebase init o firebase use . Para ver la lista de proyectos (y ver cuál está seleccionado), usa firebase projects:list .
  • Pruebas unitarias de reglas. El ID del proyecto a menudo se especifica en las llamadas a los métodos de la biblioteca de Pruebas unitarias de reglas initializeTestEnvironment o initializeTestApp .
  • La línea de comando --project del proyecto. Pasar la marca Firebase CLI --project anula el proyecto predeterminado. Deberá asegurarse de que el valor de la marca coincida con el ID del proyecto en las pruebas unitarias y la inicialización de la aplicación.

Compruebe también las configuraciones de ID de proyecto específicas de la plataforma que ha establecido al configurar sus plataformas Apple , Android y proyectos web .

Configuración de reglas de seguridad

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

Especificación de opciones de Java

El emulador de Realtime Database, el emulador de Cloud Firestore y parte del emulador de Cloud Storage para Firebase se basan en Java, que se puede personalizar con indicadores de JVM a través de la variable de entorno JAVA_TOOL_OPTIONS .

Por ejemplo, si experimenta errores relacionados con el espacio de almacenamiento dinámico de Java, puede aumentar el tamaño máximo de almacenamiento dinámico de Java a 4 GB:

export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start

Se pueden especificar varios indicadores entre comillas separados por espacios, como JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g" . Las marcas solo afectan a los componentes basados ​​en Java de los emuladores y no tienen ningún efecto en otras partes de la CLI de Firebase, como la interfaz de usuario de Emulator Suite.

Poner en marcha emuladores

Puede iniciar los emuladores para que se ejecuten hasta que se terminen manualmente, o para que se ejecuten durante un script de prueba designado y luego se apaguen automáticamente.

Dominio Descripción
emuladores: inicio Inicie emuladores para los productos de Firebase configurados en firebase.json . Los procesos del emulador continuarán ejecutándose hasta que se detengan explícitamente. Llamar a emulators:start descargará los emuladores a ~/.cache/firebase/emulators/ si aún no están instalados.
Bandera Descripción
--only Opcional. Limite qué emuladores se inician. Proporcione una lista de nombres de emuladores separados por comas, especificando uno o más de 'auth', 'database', 'firestore', 'functions', 'hosting' o 'pubsub'.
--inspect-functions debug_port Opcional. Úselo con el emulador de Cloud Functions para habilitar la depuración de puntos de interrupción de funciones en el puerto especificado (o el puerto predeterminado 9229 si se omite el argumento). Tenga en cuenta que cuando se proporciona este indicador, el emulador de Cloud Functions cambia a un modo de ejecución serializado especial en el que las funciones se ejecutan en un solo proceso, en orden secuencial (FIFO); esto simplifica la depuración de funciones, aunque el comportamiento difiere de la ejecución paralela multiproceso de funciones en la nube.
--export-on-exit= Opcional. Úselo con el emulador Authentication, Cloud Firestore, Realtime Database o Cloud Storage para Firebase. Indique a los emuladores que exporten datos a un directorio cuando se apague, como se describe para el comando emulators:export . El directorio de exportación se puede especificar con esta 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 desea, pase diferentes rutas de directorio a los --import y --export-on-exit .
import_directory --import= directorio_importación Opcional. Úselo con el emulador Authentication, Cloud Firestore, Realtime Database o Cloud Storage para Firebase. Importe datos guardados con la opción de inicio --export-on-exit o el comando emulators:export a una instancia de emulador de Authentication, Cloud Firestore, Realtime Database o Cloud Storage para Firebase en ejecución. Cualquier dato que se encuentre actualmente en la memoria del emulador se sobrescribirá.
emuladores:exec scriptpath Ejecute la secuencia de comandos en scriptpath después de iniciar los emuladores para los productos de Firebase configurados en firebase.json . Los procesos del emulador se detendrán automáticamente cuando el script haya terminado de ejecutarse.
Bandera Descripción
--only Opcional. Limite qué emuladores se inician. Proporcione una lista de nombres de emuladores separados por comas, especificando uno o más de 'firestore', 'database', 'functions', 'hosting' o 'pubsub'.
--inspect-functions debug_port Opcional. Úselo con el emulador de Cloud Functions para habilitar la depuración de puntos de interrupción de funciones en el puerto especificado (o el puerto predeterminado 9229 si se omite el argumento). Tenga en cuenta que cuando se proporciona este indicador, el emulador de Cloud Functions cambia a un modo de ejecución serializado especial en el que las funciones se ejecutan en un solo proceso, en orden secuencial (FIFO); esto simplifica la depuración de funciones, aunque el comportamiento difiere de la ejecución paralela multiproceso de funciones en la nube.
--export-on-exit= Opcional. Úselo con el emulador Authentication, Cloud Firestore, Realtime Database o Cloud Storage para Firebase. Indique a los emuladores que exporten datos a un directorio cuando se apague, como se describe para el comando emulators:export . El directorio de exportación se puede especificar con esta 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 desea, pase diferentes rutas de directorio a los --import y --export-on-exit .
import_directory --import= directorio_importación Opcional. Úselo con el emulador Authentication, Cloud Firestore, Realtime Database o Cloud Storage para Firebase. Importe datos guardados con la opción de inicio --export-on-exit o el comando emulators:export a una instancia de emulador de Authentication, Cloud Firestore, Realtime Database o Cloud Storage para Firebase en ejecución. Se sobrescribirán todos los datos que se encuentren actualmente en la memoria del emulador.
--ui Opcional. Ejecute la interfaz de usuario del emulador durante la ejecución.

El firebase emulators:exec suele ser más adecuado para los flujos de trabajo de integración continua.

Exportar e importar datos del emulador

Puede exportar datos de los emuladores de autenticación, Cloud Firestore, Realtime Database y Cloud Storage para Firebase para usarlos como un conjunto de datos de referencia común y compartible. Estos conjuntos de datos se pueden importar usando el indicador --import , como se describe anteriormente.

emuladores: exportar export_directory

Autenticación, Cloud Firestore, Realtime Database o Cloud Storage para el emulador de Firebase . Exporte datos desde una instancia de emulador de Cloud Firestore, Realtime Database o Cloud Storage para Firebase en ejecución. El export_directory especificado se creará si aún no existe. Si el directorio especificado existe, se le pedirá que confirme que se deben sobrescribir los datos de exportación anteriores. Puede omitir este aviso usando el indicador --force . El directorio de exportación contiene un archivo de manifiesto de datos, firebase-export-metadata.json .

Puede indicar a los emuladores que exporten datos automáticamente cuando se apaguen usando las --export-on-exit descritas anteriormente.

Integre con su sistema CI

Ejecución de imágenes de Emulator Suite en contenedores

La instalación y configuración de Emulator Suite con contenedores en una configuración típica de CI es sencilla.

Hay algunas cuestiones a tener en cuenta:

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

    • Es posible que desee agregar esta ruta a su configuración de caché de CI para evitar descargas repetidas.
  • Si no tiene un archivo firebase.json en su repositorio, debe agregar un argumento de línea de comando al comando emulators:start o emulators:exec para especificar qué emuladores deben iniciarse. Por ejemplo,
    --only functions,firestore .

Genere un token de autenticación (solo emulador de alojamiento)

Si sus flujos de trabajo de integración continua dependen de Firebase Hosting, deberá iniciar sesión con un token para ejecutar firebase emulators:exec . Los otros emuladores no requieren inicio de sesión.

Para generar un token, ejecuta firebase login:ci en tu entorno local; esto no debe realizarse desde un sistema CI. Siga las instrucciones para autenticarse. Solo debe realizar este paso una vez por proyecto, ya que el token será válido en todas las compilaciones. El token debe tratarse como una contraseña; asegúrese de que se mantenga en secreto.

Si su entorno de CI le permite especificar variables de entorno que se pueden usar en los scripts de compilación, simplemente cree una variable de entorno llamada FIREBASE_TOKEN , cuyo valor sea la cadena del token de acceso. Firebase CLI recogerá automáticamente la variable de entorno FIREBASE_TOKEN y los emuladores se iniciarán correctamente.

Como último recurso, simplemente puede incluir el token en su script de compilación, pero asegúrese de que las partes que no sean de confianza no tengan acceso. Para este enfoque codificado, puede agregar --token "YOUR_TOKEN_STRING_HERE" al firebase emulators:exec .

Usar la API REST de Emulator Hub

Lista de emuladores en ejecución

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

curl localhost:4400/emulators

El resultado será un objeto JSON que enumera todos los emuladores en ejecución y su configuración de host/puerto, por ejemplo:

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

Habilitar/deshabilitar activadores de funciones en segundo plano

En algunas situaciones, deberá deshabilitar temporalmente la función local y los activadores de extensión. Por ejemplo, es posible que desee eliminar todos los datos en el emulador de Cloud Firestore sin activar ninguna función onDelete que se esté ejecutando en los emuladores de Cloud Functions o Extensions.

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

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

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

{
  "enabled": false
}

Para habilitar los desencadenadores de funciones locales después de que se hayan deshabilitado, envíe una solicitud PUT al extremo /functions/enableBackgroundTriggers del Emulator Hub.

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

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

{
  "enabled": true
}

Integraciones del SDK del emulador

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

Disponibilidad del SDK del cliente

Androide plataformas de manzana Web Interfaz de usuario de base de fuego
Androide
Interfaz de usuario de base de fuego
iOS
Interfaz de usuario de base de fuego
Web
Base de datos en tiempo real 19.4.0 7.2.0 8.0.0 6.4.0 Futuro N / A
Tienda de fuego en la nube 21.6.0 7.2.0 8.0.0 6.4.0 Futuro N / A
Autenticación 20.0.0 7.0.0 8.0.0 7.0.0 Futuro 4.7.2
Almacenamiento en la nube para Firebase 20.0.0 8.0.0 8.4.0 7.0.0 11.0.0 N / A
Funciones en la nube 19.1.0 7.2.0 8.0.0 N / A N / A N / A
Alojamiento N / A N / A N / A N / A N / A N / A
Extensiones N / A N / A N / A N / A N / A N / A

Disponibilidad del SDK de administración

Nodo Java Pitón Vamos
Base de datos en tiempo real 8.6.0 6.10.0 2.18.0 Futuro
Tienda de fuego en la nube 8.0.0 6.10.0 3.0.0 1.0.0
Autenticación 9.3.0 7.2.0 5.0.0 4.2.0
Almacenamiento en la nube para Firebase 9.8.0 Futuro Futuro Futuro
Funciones en la nube N / A N / A N / A N / A
Alojamiento N / A N / A N / A N / A
Extensiones N / A N / A N / A N / A