Firebase-tools: firebase.json 'functions.ignore' aumenta o upload do pacote

Criado em 15 ago. 2019  ·  3Comentários  ·  Fonte: firebase/firebase-tools

NÃO EXCLUIR validate_template=true template_path=.github/ISSUE_TEMPLATE/bug_report.md Obrigado por contribuir com a comunidade Firebase! md5-cd82511516d4d120ac6f38b938897bc8 Sim, definitivamente não somos perfeitos! Use este modelo e inclua uma reprodução mínima ao abrir o problema. Se você souber como resolver o problema, crie um Pull Request e teremos prazer em analisá-lo! md5-d1dc1414712186318d009e8257a27e48 Ótimo, adoramos saber como podemos melhorar nossos produtos! No entanto, não use este modelo para enviar uma solicitação de recurso. Envie suas solicitações de recursos para: https://firebase.google.com/support/contact/bugs-features/ md5-a11e3d9ea91af19a593bf84612124e1a Recebemos muitos deles e adoramos ajudar você, mas o GitHub não é o melhor lugar para eles e eles Será fechado. Dê uma olhada no guia primeiro: https://firebase.google.com/docs/cli/ Se a documentação oficial não ajudar, tente perguntar através do nosso canal de suporte oficial: https://firebase.google.com/ support/ Locais adicionais para verificar soluções ou assistência da comunidade: - Stack Overflow: https://stackoverflow.com/ - Firebase Slack Community: https://firebase.community/ *Evite postagens duplicadas em vários canais!*

Informações do ambiente


ferramentas do firebase:

firebase --version
7.2.2


Plataforma:
Ambientes de desenvolvimento MacOS (10.14.6 (18G87)) e Windows 10.

Caso de teste


MCVE: modelo de funções do Firebase + uma seção 'functions.ignore' em firebase.json

Passos para reproduzir

Crie um projeto do Firebase.

Execute as funções init do Firebase com opções padrão e adicione-as ao seu novo projeto:

firebase init functions

Remova o comentário da função de amostra helloWorld em index.js e implante:

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

Observe o tamanho das funções empacotadas implantadas (22,95 KB).

Edite firebase.json para incluir uma seção 'functions.ignore':

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

Implante novamente:

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

Observe que o pacote implantado cresceu de 22,95 KB para 9,07 MB .

Comportamento esperado

Espero que, se as coisas forem ignoradas, o pacote implantado fique menor em vez de maior.

Comportamento real

O pacote implantado aumenta de tamanho em várias ordens de magnitude de 22,95 KB para 9,07 MB.

Para referência, o tamanho da pasta functions incluindo node_modules local é de 29 MB neste caso. A própria pasta node_modules tem 28,9 MB em disco e ~ 6 MB compactada.

Isso também afeta projetos TypeScript, presumivelmente porque o problema é acionado após a parte tsc das coisas.

Comente

Ainda não encontrei nenhuma documentação boa/definitiva para o arquivo de configuração firebase.json e especificamente a seção functions . Há alguma documentação da seção hosting aqui . Meu entendimento da estrutura/uso functions.ignore é atualmente baseado em https://github.com/firebase/firebase-tools/issues/291#issuecomment -322526710.

Há um problema relacionado nº 429 em que @laurenzlong indica que a seção ignore deve estar operacional/corrigida.

Questão aberta

Onde o pacote implantado é construído localmente, antes da implantação? Eu corri com --debug e não consegui descobrir nenhum caminho de arquivo útil.

Obrigado!

Obrigado por considerar! E meu plano de dados de tethering por telefone agradece por resolver isso, pois minha implantação atual do projeto é de ~ 55 MB antes de descobrir o que estava acontecendo :)

Comentários muito úteis

O comportamento que você descreveu é o comportamento que eu esperaria.

A documentação não descreve functions.ignore , como você apontou; no entanto, ele é usado pela CLI .

Não oficialmente (por ser _indocumentado_), firebase.ignore tem um padrão de ["node_modules"] . Isso nos permite limitar a quantidade de coisas que temos que carregar durante a implantação (que você pode imaginar que pode se tornar muito grande, muito rapidamente). Ao definir firebase.ignore em package.json , ele informa à CLI que _nothing_ deve ser ignorado. Agora, a pasta node_modules é incluída no arquivo e enviada para o Functions.

Para responder à sua pergunta: em uma descrição de alto nível do processo, a CLI não cria um pacote localmente. Ele faz aproximadamente o seguinte:

  1. Executa qualquer script de pré-implantação para funções (também especificado em firebase.json ).
  2. Analisa o código-fonte das funções a serem implantadas.
  3. Compacta o código-fonte (geralmente ignorando node_modules ) e o carrega para o Functions.

Depois que o código-fonte é carregado, a infraestrutura do Functions executa npm install para o package.json e a fonte está pronta para servir aos usuários (pelo menos, nesta explicação super ondulada).

Espero que isso responda suas perguntas. Mas como não há nenhum bug relacionado à CLI aqui, vou encerrar este problema.

Todos 3 comentários

O comportamento que você descreveu é o comportamento que eu esperaria.

A documentação não descreve functions.ignore , como você apontou; no entanto, ele é usado pela CLI .

Não oficialmente (por ser _indocumentado_), firebase.ignore tem um padrão de ["node_modules"] . Isso nos permite limitar a quantidade de coisas que temos que carregar durante a implantação (que você pode imaginar que pode se tornar muito grande, muito rapidamente). Ao definir firebase.ignore em package.json , ele informa à CLI que _nothing_ deve ser ignorado. Agora, a pasta node_modules é incluída no arquivo e enviada para o Functions.

Para responder à sua pergunta: em uma descrição de alto nível do processo, a CLI não cria um pacote localmente. Ele faz aproximadamente o seguinte:

  1. Executa qualquer script de pré-implantação para funções (também especificado em firebase.json ).
  2. Analisa o código-fonte das funções a serem implantadas.
  3. Compacta o código-fonte (geralmente ignorando node_modules ) e o carrega para o Functions.

Depois que o código-fonte é carregado, a infraestrutura do Functions executa npm install para o package.json e a fonte está pronta para servir aos usuários (pelo menos, nesta explicação super ondulada).

Espero que isso responda suas perguntas. Mas como não há nenhum bug relacionado à CLI aqui, vou encerrar este problema.

Obrigado pela informação @bkendall.

Com base em #291, pensei erroneamente que a CLI _sempre_ excluiu node_modules e que o material em functions.ignore era aditivo. Adicionar um padrão explícito para node_modules faz o que você descreve.

@bkendall Por que não documentar?

Esta página foi útil?
0 / 5 - 0 avaliações