Firebase-tools: firebase.json 'functions.ignore' téléchargement du paquet bloats

Créé le 15 août 2019  ·  3Commentaires  ·  Source: firebase/firebase-tools

NE PAS SUPPRIMER validate_template=true template_path=.github/ISSUE_TEMPLATE/bug_report.md Merci de contribuer à la communauté Firebase ! md5-cd82511516d4d120ac6f38b938897bc8 Ouais, nous ne sommes définitivement pas parfaits ! Veuillez utiliser ce modèle et inclure une reproduction minimale lors de l'ouverture du problème. Si vous savez comment résoudre le problème, veuillez créer une demande d'extraction, et nous serions ravis de l'examiner ! md5-d1dc1414712186318d009e8257a27e48 Génial, nous aimons entendre comment nous pouvons améliorer nos produits ! Cependant, n'utilisez pas ce modèle pour soumettre une demande de fonctionnalité. Veuillez soumettre vos demandes de fonctionnalités à : https://firebase.google.com/support/contact/bugs-features/ md5-a11e3d9ea91af19a593bf84612124e1a Nous en recevons beaucoup et nous aimons vous aider, mais GitHub n'est pas le meilleur endroit pour eux et ils sera fermé. Veuillez d'abord consulter le guide : https://firebase.google.com/docs/cli/ Si la documentation officielle ne vous aide pas, essayez de demander via notre canal d'assistance officiel : https://firebase.google.com/ support/ Emplacements supplémentaires pour vérifier les solutions ou l'assistance de la communauté : - Stack Overflow : https://stackoverflow.com/ - Firebase Slack Community : https://firebase.community/ *Veuillez éviter les publications en double sur plusieurs canaux !*

Informations sur l'environnement


firebase-tools :

firebase --version
7.2.2


Plate-forme:
Environnements de développement MacOS (10.14.6 (18G87)) et Windows 10.

Cas de test


MCVE : Modèle de fonctions Firebase + une section "functions.ignore" dans firebase.json

Étapes à reproduire

Créez un projet Firebase.

Exécutez les fonctions firebase init avec les options par défaut et ajoutez-les à votre nouveau projet :

firebase init functions

Décommentez l'exemple de fonction helloWorld dans index.js et déployez :

⋊> ~/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

Notez la taille des fonctions packagées déployées (22,95 Ko).

Modifiez firebase.json pour inclure une section 'functions.ignore' :

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

Déployez à nouveau :

⋊> ~/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 

Notez que le package déployé est passé de 22,95 Ko à 9,07 Mo .

Comportement attendu

Je m'attends à ce que si les choses sont ignorées, le package déployé devient plus petit plutôt que plus grand.

Comportement réel

La taille du package déployé augmente de plusieurs ordres de grandeur, passant de 22,95 Ko à 9,07 Mo.

Pour référence, la taille du dossier functions incluant node_modules local est de 29 Mo dans ce cas. Le dossier node_modules lui-même fait 28,9 Mo sur le disque et environ 6 Mo sont compressés.

Cela affecte également les projets TypeScript, probablement parce que le problème est déclenché après la partie tsc des choses.

Commenter

Je n'ai pas encore trouvé de documentation bonne/définitive pour le fichier de configuration firebase.json et plus particulièrement la section functions . Il y a de la documentation sur la section hosting ici . Ma compréhension de la structure/utilisation functions.ignore est actuellement basée sur https://github.com/firebase/firebase-tools/issues/291#issuecomment -322526710.

Il existe un problème connexe #429 où @laurenzlong indique que la section ignore devrait être opérationnelle/corrigée.

Question ouverte

Où le package déployé est-il construit localement, avant le déploiement ? J'ai couru avec --debug et je n'ai trouvé aucun chemin de fichier utile.

Merci!

Merci d'avoir considéré! Et mon plan de données de partage de téléphone vous remercie d'avoir résolu ce problème, car le déploiement de mon projet actuel est d'environ 55 Mo avant que je ne comprenne ce qui se passait :)

Commentaire le plus utile

Le comportement que vous avez décrit est le comportement auquel je m'attendais.

La documentation ne décrit pas functions.ignore , comme vous l'avez souligné ; cependant, il est utilisé par la CLI .

Officieusement (en ce sens qu'il est _non documenté_), firebase.ignore a une valeur par défaut de ["node_modules"] . Cela nous permet de limiter la quantité de choses que nous devons télécharger pendant le déploiement (ce qui, vous pouvez l'imaginer, pourrait devenir très volumineux, très rapidement). En définissant firebase.ignore dans package.json , il indique à la CLI que _rien_ doit être ignoré. Maintenant, le dossier node_modules est inclus dans l'archive et envoyé à Functions.

Pour répondre à votre question : dans une description de haut niveau du processus, la CLI ne construit pas de package localement. Il fait à peu près ce qui suit :

  1. Exécute n'importe quel script de pré-déploiement pour les fonctions (également spécifié dans firebase.json ).
  2. Analyse le code source des fonctions à déployer.
  3. Zippe le code source (en ignorant généralement node_modules ) et le télécharge dans Functions.

Une fois le code source téléchargé, l'infrastructure Functions exécute npm install pour les package.json et la source est prête à servir les utilisateurs (du moins, dans cette explication très pratique).

J'espère que cela répond à vos questions. Mais comme il n'y a pas de bogue lié à la CLI ici, je vais fermer ce problème.

Tous les 3 commentaires

Le comportement que vous avez décrit est le comportement auquel je m'attendais.

La documentation ne décrit pas functions.ignore , comme vous l'avez souligné ; cependant, il est utilisé par la CLI .

Officieusement (en ce sens qu'il est _non documenté_), firebase.ignore a une valeur par défaut de ["node_modules"] . Cela nous permet de limiter la quantité de choses que nous devons télécharger pendant le déploiement (ce qui, vous pouvez l'imaginer, pourrait devenir très volumineux, très rapidement). En définissant firebase.ignore dans package.json , il indique à la CLI que _rien_ doit être ignoré. Maintenant, le dossier node_modules est inclus dans l'archive et envoyé à Functions.

Pour répondre à votre question : dans une description de haut niveau du processus, la CLI ne construit pas de package localement. Il fait à peu près ce qui suit :

  1. Exécute n'importe quel script de pré-déploiement pour les fonctions (également spécifié dans firebase.json ).
  2. Analyse le code source des fonctions à déployer.
  3. Zippe le code source (en ignorant généralement node_modules ) et le télécharge dans Functions.

Une fois le code source téléchargé, l'infrastructure Functions exécute npm install pour les package.json et la source est prête à servir les utilisateurs (du moins, dans cette explication très pratique).

J'espère que cela répond à vos questions. Mais comme il n'y a pas de bogue lié à la CLI ici, je vais fermer ce problème.

Merci pour l'info @bkendall.

Sur la base de # 291, j'ai pensé à tort que la CLI _toujours_ excluait les node_modules et que le contenu de functions.ignore était additif. L'ajout d'un modèle explicite pour node_modules fait ce que vous décrivez.

@bkendall Pourquoi ne pas le documenter ?

Cette page vous a été utile?
0 / 5 - 0 notes