Firebase-tools: firebase.json 'functions.ignore' aumenta la carga del paquete

Creado en 15 ago. 2019  ·  3Comentarios  ·  Fuente: firebase/firebase-tools

NO ELIMINAR validate_template=true template_path=.github/ISSUE_TEMPLATE/bug_report.md ¡Gracias por contribuir a la comunidad de Firebase! md5-cd82511516d4d120ac6f38b938897bc8 ¡Sí, definitivamente no somos perfectos! Utilice esta plantilla e incluya una reproducción mínima al abrir el problema. Si sabe cómo resolver el problema, cree una solicitud de extracción y estaremos encantados de revisarla. md5-d1dc1414712186318d009e8257a27e48 Genial, ¡nos encanta saber cómo podemos mejorar nuestros productos! Sin embargo, no utilice esta plantilla para enviar una solicitud de función. Envíe sus solicitudes de funciones a: https://firebase.google.com/support/contact/bugs-features/ md5-a11e3d9ea91af19a593bf84612124e1a Recibimos muchas de ellas y nos encanta ayudarlo, pero GitHub no es el mejor lugar para ellas y estara cerrado. Primero, consulte la guía: https://firebase.google.com/docs/cli/ Si la documentación oficial no ayuda, intente preguntar a través de nuestro canal de soporte oficial: https://firebase.google.com/ support/ Ubicaciones adicionales para buscar soluciones o asistencia de la comunidad: - Stack Overflow: https://stackoverflow.com/ - Firebase Slack Community: https://firebase.community/ *¡Evite publicaciones duplicadas en múltiples canales!*

Información del entorno


Firebase-herramientas:

firebase --version
7.2.2


Plataforma:
Ambos entornos de desarrollo MacOS (10.14.6 (18G87)) y Windows 10.

Caso de prueba


MCVE: plantilla de funciones de Firebase + una sección 'functions.ignore' en firebase.json

pasos para reproducir

Crea un proyecto de base de fuego.

Ejecute las funciones de inicio de Firebase con las opciones predeterminadas y agréguelas a su nuevo proyecto:

firebase init functions

Descomente la función de muestra helloWorld en index.js e implemente:

⋊> ~/D/f/functions firebase deploy                                                                                    11:02:38

=== Deploying to 'test-function-deploy-3a957'...

i  deploying functions
i  functions: ensuring necessary APIs are enabled...
✔  functions: all necessary APIs are enabled
i  functions: preparing functions directory for uploading...
i  functions: packaged functions (22.95 KB) for uploading
✔  functions: functions folder uploaded successfully
i  functions: updating Node.js 8 function helloWorld(us-central1)...
✔  functions[helloWorld(us-central1)]: Successful update operation. 

✔  Deploy complete!

Project Console: https://console.firebase.google.com/project/test-function-deploy-3a957/overview
⋊> ~/D/f/functions

Tenga en cuenta el tamaño de las funciones empaquetadas implementadas (22,95 KB).

Edite firebase.json para incluir una sección 'functions.ignore':

{
  "functions": {
    "ignore": []
  }
}

Implementar de nuevo:

⋊> ~/D/f/functions firebase deploy                                                                                    11:03:24

=== Deploying to 'test-function-deploy-3a957'...

i  deploying functions
i  functions: ensuring necessary APIs are enabled...
✔  functions: all necessary APIs are enabled
i  functions: preparing functions directory for uploading...
i  functions: packaged functions (9.07 MB) for uploading
✔  functions: functions folder uploaded successfully
i  functions: updating Node.js 8 function helloWorld(us-central1)...
✔  functions[helloWorld(us-central1)]: Successful update operation. 

✔  Deploy complete!

Project Console: https://console.firebase.google.com/project/test-function-deploy-3a957/overview
⋊> ~/D/f/functions 

Tenga en cuenta que el paquete implementado ha aumentado de 22,95 KB a 9,07 MB .

Comportamiento esperado

Espero que si se ignoran las cosas, el paquete implementado se vuelve más pequeño en lugar de más grande.

Comportamiento real

El paquete implementado aumenta de tamaño en varios órdenes de magnitud de 22,95 KB a 9,07 MB.

Como referencia, el tamaño de la carpeta functions incluido el node_modules local, es de 29 MB en este caso. La carpeta node_modules en sí ocupa 28,9 MB en el disco y tiene ~6 MB comprimidos con gzip.

Esto también afecta a los proyectos de TypeScript, presumiblemente porque el problema se activa después de la parte tsc .

Comentario

Todavía no he encontrado ninguna documentación buena/definitiva para el archivo de configuración firebase.json y específicamente la sección functions . Hay algo de documentación de la sección hosting aquí . Mi comprensión de la estructura/uso de functions.ignore se basa actualmente en https://github.com/firebase/firebase-tools/issues/291#issuecomment -322526710.

Hay un problema relacionado #429 donde @laurenzlong indica que la sección ignore debería estar operativa/arreglada.

Pregunta abierta

¿Dónde se crea localmente el paquete implementado antes de implementarlo? Ejecuté --debug y no pude encontrar ninguna ruta de archivo útil.

¡Gracias!

¡Gracias por considerar! Y mi plan de datos de anclaje de teléfono le agradece por resolver esto, ya que la implementación de mi proyecto actual es de ~55 MB antes de que me diera cuenta de lo que estaba pasando :)

Comentario más útil

El comportamiento que describiste es el comportamiento que esperaría.

La documentación no describe functions.ignore , como señaló; sin embargo, es utilizado por la CLI .

Extraoficialmente (ya que está _indocumentado_), firebase.ignore tiene un valor predeterminado de ["node_modules"] . Esto nos permite limitar la cantidad de cosas que tenemos que cargar durante la implementación (que, como puede imaginar, podría volverse muy grande, muy rápidamente). Al configurar firebase.ignore en package.json , le dice a la CLI que _nothing_ debe ignorarse. Ahora, la carpeta node_modules se incluye en el archivo y se envía a Funciones.

Para responder a su pregunta: en una descripción de alto nivel del proceso, la CLI no crea un paquete localmente. Hace aproximadamente lo siguiente:

  1. Ejecuta cualquier script previo a la implementación para funciones (también especificado en firebase.json ).
  2. Analiza el código fuente para las funciones a implementar.
  3. Comprime el código fuente (normalmente ignorando node_modules ) y lo sube a Funciones.

Una vez que se carga el código fuente, la infraestructura de Functions ejecuta npm install para package.json y la fuente está lista para funcionar y servir a los usuarios (al menos, en esta explicación súper manual).

Espero que eso responda a sus preguntas. Pero como no hay ningún error relacionado con CLI aquí, voy a cerrar este problema.

Todos 3 comentarios

El comportamiento que describiste es el comportamiento que esperaría.

La documentación no describe functions.ignore , como señaló; sin embargo, es utilizado por la CLI .

Extraoficialmente (ya que está _indocumentado_), firebase.ignore tiene un valor predeterminado de ["node_modules"] . Esto nos permite limitar la cantidad de cosas que tenemos que cargar durante la implementación (que, como puede imaginar, podría volverse muy grande, muy rápidamente). Al configurar firebase.ignore en package.json , le dice a la CLI que _nothing_ debe ignorarse. Ahora, la carpeta node_modules se incluye en el archivo y se envía a Funciones.

Para responder a su pregunta: en una descripción de alto nivel del proceso, la CLI no crea un paquete localmente. Hace aproximadamente lo siguiente:

  1. Ejecuta cualquier script previo a la implementación para funciones (también especificado en firebase.json ).
  2. Analiza el código fuente para las funciones a implementar.
  3. Comprime el código fuente (normalmente ignorando node_modules ) y lo sube a Funciones.

Una vez que se carga el código fuente, la infraestructura de Functions ejecuta npm install para package.json y la fuente está lista para funcionar y servir a los usuarios (al menos, en esta explicación súper manual).

Espero que eso responda a sus preguntas. Pero como no hay ningún error relacionado con CLI aquí, voy a cerrar este problema.

Gracias por la información @bkendall.

Basado en el n.° 291, pensé erróneamente que la CLI _siempre_ excluía node_modules, y que el contenido de functions.ignore era aditivo. Agregar un patrón explícito para node_modules hace lo que describe.

@bkendall ¿Por qué no documentarlo?

¿Fue útil esta página
0 / 5 - 0 calificaciones