Gestione las configuraciones del proyecto con el manifiesto de Extensiones

Un manifiesto de extensiones es una lista de instancias de extensión y sus configuraciones. Con el manifiesto, puedes:

  • Comparte la configuración de tus extensiones con otros
  • Copie la configuración de sus extensiones entre diferentes proyectos (como desde su proyecto de prueba a su proyecto de producción)
  • Implemente todas sus extensiones a la vez
  • Pruebe cómo funcionan sus extensiones con su aplicación usando Firebase Local Emulator Suite
  • Confirme la configuración de sus extensiones al control de fuente
  • Incluya extensiones en su proceso de CI/CD

Un manifiesto de extensiones tiene dos partes:

  • La sección extensions de su firebase.json , que es un mapa del ID de la instancia a la referencia de la versión de la extensión. Por ejemplo:

    {
     "extensions": {
       "my-bigquery-extension": "firebase/firestore-bigquery-export@^0.1.18",
       "my-image-resizer": "firebase/storage-resize-images@^0.1.22",
     }
    }
    
  • Archivos .env que contienen la configuración para cada una de sus instancias de extensión, en el subdirectorio extensions/ del directorio de su proyecto de Firebase. Por ejemplo, una instancia de storage-resize-images podría tener un archivo .env como el siguiente:

    IMAGE_TYPE=jpeg
    LOCATION=us-central1
    IMG_BUCKET=${param:PROJECT_ID}.appspot.com
    IMG_SIZES=100x100
    DELETE_ORIGINAL_FILE=false

Crear un manifiesto de extensiones

Hay tres formas de crear un manifiesto de extensiones:

  • Administre el manifiesto de sus extensiones con Firebase CLI
  • Exportar la configuración de extensiones de un proyecto
  • Edite los archivos de manifiesto manualmente

Los dos primeros métodos se explican a continuación.

Administre el manifiesto de sus extensiones con Firebase CLI

Puede ejecutar la mayoría de los comandos ext: de Firebase CLI con la opción --local para actualizar el manifiesto de extensiones sin cambiar realmente la configuración actual del proyecto.

Por ejemplo:

firebase ext:install --local firebase/firestore-bigquery-export

Al ejecutar el comando anterior, se le pedirá que configure la última versión de la extensión firebase/firestore-bigquery-export y guarde la configuración en el manifiesto, pero no implementará la configuración en su proyecto.

Aquí hay algunos ejemplos más de comandos que modifican el manifiesto de extensiones:

# ext:configure changes the params for an extension instance in your extensions manifest
$ firebase ext:configure my-bigquery-extension --local

# ext:update --local updates an instance in your extensions manifest
# to the latest version of that extension
$ firebase ext:update my-bigquery-extension --local

# You can also specify a version if you don't want to update to the latest version
$ firebase ext:update my-bigquery-extension firebase/[email protected] --local 

# ext:uninstall --local removes an instance from your extensions manifest
$ firebase ext:uninstall my-bigquery-extension --local

Exportar la configuración de extensiones de un proyecto

Para guardar la configuración de extensiones actual de un proyecto en el manifiesto, haga lo siguiente:

  1. Si aún no lo has hecho, configura Firebase CLI
  2. Desde un símbolo del shell, cambie al directorio del proyecto. (El directorio de su proyecto contiene el archivo firebase.json ).
  3. Ejecute el comando ext:export :
    firebase ext:export

El comando ext:export agregará una sección extensions al archivo firebase.json . Además, el comando ext:export crea un directorio extensions que contiene un archivo .env para cada instancia de extensión que haya instalado. Estos archivos contienen los parámetros de configuración para cada instancia.

Pruebe una configuración de extensiones con Firebase Local Emulator Suite

Una vez que haya agregado algunas instancias de extensión a su manifiesto de extensiones, puede probarlas usando Local Emulator Suite.

  1. Instale y configure Local Emulator Suite .

  2. Inicie el paquete de emuladores locales :

    • Para ejecutar Emulator Suite de forma interactiva, ejecute: firebase emulators:start
    • Para ejecutar Emulator Suite y ejecutar un script de prueba, ejecute: firebase emulators:exec my-test.sh

Ahora, si tiene instancias de extensión enumeradas en su manifiesto, Local Emulator Suite descargará el código fuente de esas extensiones a ~/.cache/firebase/extensions . Una vez que se hayan descargado, se iniciará Local Emulator Suite y podrá activar cualquiera de las funciones activadas en segundo plano de las extensiones y conectar su aplicación a Emulator Suite para probar su integración con su aplicación.

Implementar una configuración de extensiones en un proyecto

Una vez que haya agregado algunas instancias de extensión a su manifiesto de extensión, puede implementarlas en un proyecto usando Firebase CLI. Cuando realiza la implementación con un manifiesto de extensiones, instala, actualiza y configura todas las instancias de extensión en el manifiesto en un proyecto a la vez.

Para implementar un manifiesto de extensiones:

  1. Desde un símbolo del shell, cambie al directorio que contiene la configuración de extensiones guardada. (Este es el directorio que contiene firebase.json . Si acaba de ejecutar ext:export , ya está en el directorio correcto).
  2. Ejecute el comando deploy . Si desea implementar las extensiones en un proyecto distinto al actual, especifique también --project= :
    firebase deploy --only extensions –-project=YOUR_PROJECT_ID

El comando deploy validará la configuración de cada instancia, le preguntará si desea eliminar alguna instancia de extensión de su proyecto de destino que no esté incluida en firebase.json y luego implementará todas sus instancias de extensión.

Configuraciones de extensión específicas del proyecto

Las configuraciones de extensiones guardadas se pueden utilizar para implementar en varios proyectos diferentes: por ejemplo, un proyecto de prueba y un proyecto de producción. Al hacer esto, es posible que algunos valores de parámetros deban ser diferentes para cada proyecto. Los archivos .env específicos del proyecto lo hacen posible:

  • Coloque valores de parámetros que difieran entre proyectos en extensions/ EXTENSION_INSTANCE_ID .env. YOUR_PROJECT_ID
  • Coloque los valores de los parámetros compartidos en extensions/ EXTENSION_INSTANCE_ID .env .

A veces, es posible que desees utilizar un valor de parámetro diferente al emular tus extensiones: por ejemplo, es posible que desees proporcionar una clave API de prueba en lugar de una de producción. Coloque estos parámetros en un archivo .local :

  • Coloque los parámetros no secretos que desee utilizar durante la emulación en extensions/ EXTENSION_INSTANCE_ID .env.local
  • Coloque los valores de los parámetros secretos en extensions/ EXTENSION_INSTANCE_ID .secret.local