Instalar, configurar e integrar Local Emulator Suite

Firebase Local Emulator Suite se puede instalar y configurar para diferentes entornos de prototipos y pruebas, 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 16.0 o superior.
  • Java JDK versión 11 o superior.

Para instalar Emulator Suite:

  1. Instale Firebase CLI . Si aún no tienes Firebase CLI instalado, instálalo ahora . Necesitará la versión CLI 8.14.0 o superior para utilizar Emulator Suite. Puedes comprobar qué versión tienes 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 instrucciones en pantalla para especificar qué productos usar:
    firebase init
  3. Configure Emulator Suite. Este comando inicia un asistente de configuración que le permite seleccionar emuladores de interés, descargar los archivos binarios del emulador correspondientes y configurar los puertos del emulador si los valores predeterminados no son apropiados.
    firebase init emulators

Una vez instalado 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 conjunto de emuladores

Opcionalmente, puedes configurar los puertos de red de los emuladores y la ruta a las definiciones de 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 estos ajustes, los emuladores escucharán en sus puertos predeterminados y los emuladores de 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 son destructivos; aceptar los valores predeterminados preservará la configuración actual del emulador.

Configuración de puerto

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 de 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 base de fuego 5000
Pub/Sub 8085

Configuración de ID de proyecto

Dependiendo de cómo invoques los emuladores, puedes ejecutar varias instancias de un emulador usando diferentes ID de proyecto de Firebase o varias instancias de emulador para un ID de proyecto determinado. En tales casos, las instancias del emulador se ejecutan en un entorno independiente.

Generalmente 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 múltiples ID de proyecto en el entorno, aunque puedes anular este comportamiento estableciendo la clave singleProjectMode en false en tu firebase.json .

Puede comprobar si las declaraciones de ID del proyecto no coinciden en:

  • El proyecto predeterminado en la línea de comando. 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), use firebase projects:list .
  • Pruebas unitarias de reglas. El ID del proyecto a menudo se especifica en llamadas a los métodos de la biblioteca de pruebas unitarias de reglas initializeTestEnvironment o initializeTestApp .
  • La línea de comando --project bandera. Al pasar el indicador --project de Firebase CLI se anula el proyecto predeterminado. Deberá asegurarse de que el valor de la bandera coincida con el ID del proyecto en las pruebas unitarias y en la inicialización de la aplicación.

También verifique las configuraciones de ID de proyecto específicas de la plataforma que estableció 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 database , firestore y las 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 JVM a través de la variable de entorno JAVA_TOOL_OPTIONS .

Por ejemplo, si experimenta errores relacionados con el espacio del montón de Java, puede aumentar el tamaño máximo del montón de Java a 4 GB:

export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start

Se pueden especificar varios indicadores entre comillas separadas 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 Firebase CLI, como la interfaz de usuario de Emulator Suite.

Iniciar emuladores

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

Dominio Descripción
emuladores: inicio Inicie los emuladores para los productos Firebase configurados en firebase.json . Los procesos del emulador continuarán ejecutándose hasta que se detengan explícitamente. Llamar emulators:start descargará los emuladores a ~/.cache/firebase/emulators/ si aún no están instalados.
Bandera Descripción
--only Opcional. Limita 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 y 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 produzca el apagado, como se describe para el comando emulators:export . El directorio de exportación se puede especificar con esta bandera: firebase emulators:start --export-on-exit=./saved-data . Si se utiliza --import , la ruta de exportación por defecto 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 indicadores --import y --export-on-exit .
--import= import_directory Opcional. Úselo con el emulador Authentication, Cloud Firestore, Realtime Database o Cloud Storage para Firebase. Importe datos guardados usando la opción de inicio --export-on-exit o el comando emulators:export a una instancia en ejecución del emulador de autenticación, Cloud Firestore, Realtime Database o Cloud Storage para Firebase. Cualquier dato que se encuentre actualmente en la memoria del emulador se sobrescribirá.
emuladores: ruta scriptpath Ejecute el script en scriptpath después de iniciar los emuladores para los productos 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. Limita 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 y 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 produzca el apagado, como se describe para el comando emulators:export . El directorio de exportación se puede especificar con esta bandera: firebase emulators:start --export-on-exit=./saved-data . Si se utiliza --import , la ruta de exportación por defecto 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 indicadores --import y --export-on-exit .
--import= import_directory Opcional. Úselo con el emulador Authentication, Cloud Firestore, Realtime Database o Cloud Storage para Firebase. Importe datos guardados usando la opción de inicio --export-on-exit o el comando emulators:export a una instancia en ejecución del emulador de autenticación, Cloud Firestore, Realtime Database o Cloud Storage para Firebase. 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 método firebase emulators:exec generalmente es más apropiado para 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 utilizarlos 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 en ejecución del emulador de Cloud Firestore, Realtime Database o Cloud Storage para Firebase. 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 mensaje 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 utilizando los indicadores --export-on-exit descritos 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 de CI típica 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 la configuración de su 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 emulators:start o emulators:exec para especificar qué emuladores se deben iniciar. Por ejemplo,
    --only functions,firestore .

Generar un token de autenticación (solo emulador de hosting)

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

Para generar un token, ejecute firebase login:ci en su entorno local; Esto no debe realizarse desde un sistema CI. Siga las instrucciones para autenticarse. Solo deberías necesitar 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 seleccionará automáticamente la variable de entorno FIREBASE_TOKEN y los emuladores se iniciarán correctamente.

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

Utilice la API REST de Emulator Hub

Lista de emuladores en ejecución

Para enumerar los emuladores actualmente en ejecución, envíe una solicitud GET al punto final /emulators de Emulator Hub.

curl localhost:4400/emulators

El resultado será un objeto JSON que enumerará 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
  }
}

Activar/desactivar activadores de funciones en segundo plano

En algunas situaciones, deberá desactivar 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 punto final /functions/disableBackgroundTriggers de 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 activadores de funciones locales después de haberlos deshabilitado, envíe una solicitud PUT al punto final /functions/enableBackgroundTriggers de 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 cliente y de administrador. En el futuro , se planea el soporte del emulador, 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 de 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 administrador

Nodo Java Pitón Ir
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 de 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