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:
Sigue estas instrucciones para instalar Emulator Suite:
- 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
- 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
- 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 editafirebase.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"
}
}
}
Especifica las opciones de Java
Los emuladores de Realtime Database, Cloud Firestore y parte del de Cloud Storage
se basan en Java, que puede personalizarse con marcas de JVM a través de la
variable de entorno JAVA_TOOL_OPTIONS
.
Por ejemplo, si experimentas errores relacionados con el espacio de montón de Java, puedes aumentar su tamaño máximo a 4 GB:
export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start
Se pueden especificar varias marcas entre comillas y separadas por espacios, como en este ejemplo
JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g"
. Las marcas solo afectan a los componentes basados en Java
de los emuladores y no tienen efecto en otras partes de Firebase CLI, como
la IU de Emulator Suite.
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.
|
||||||||||||
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.
|
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
Con las marcas |
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 comandosemulators:start
oemulators: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 la función local y
los activadores de extensiones. 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 o de extensiones.
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 | Plataformas de Apple | 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 |
Extensiones | 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 | 7.2.0 | 5.0.0 | 4.2.0 |
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 |
Extensiones | N/A | N/A | N/A | N/A |