Ir para o console

Usar o TypeScript para Cloud Functions

Para desenvolvedores que preferem escrever funções no TypeScript, o Cloud Functions apresenta dois tipos de suporte:

  • Criar e configurar projetos do TypeScript para transcompilação automática na inicialização (firebase init functions).
  • Transcompilar a fonte do TypeScript existente para JavaScript no momento da implantação por um hook de pré-implantação.

Seguindo as instruções deste guia, você poderá migrar um projeto existente do JavaScript para o TypeScript e continuar implantando funções usando um hook de pré-implantação para transcompilar seu código-fonte. O TypeScript oferece muitos benefícios em comparação ao Vanilla JavaScript ao escrever funções. Alguns exemplos são:

  • O TypeScript é compatível com os recursos mais recentes do JavaScript, como dessincronizar/aguardar, o que simplifica o gerenciamento de promessas.
  • Um linter do Cloud Functions destaca os problemas comuns durante a codificação.
  • A segurança de tipo evita erros de tempo de execução nas funções implantadas.

Para uma amostra de trabalho do Cloud Functions escrita no TypeScript, consulte o artigo Getting started with TypeScript no nosso repositório do GitHub (em inglês). Se você é iniciante no TypeScript, consulte TypeScript em 5 minutos.

Como inicializar um novo projeto do Cloud Functions com TypeScript

Execute o comando firebase init em um novo diretório. A ferramenta oferece opções para criar o projeto com JavaScript ou TypeScript. Escolha TypeScript para ter como resultado a seguinte estrutura de projeto:

myproject
 +- functions/     # Directory containing all your functions code
      |
      +- package.json  # npm package file describing your Cloud Functions code
      |
      +- tsconfig.json
      |
      +- tslint.json # Optional file
      |
      +- src/     # Directory containing TypeScript source
      |   |
      |   +- index.ts  # main source file for your Cloud Functions code
      |
      +- lib/
          |
          +- index.js  # Built/transpiled JavaScript code
          |
          +- index.js.map # Source map for debugging

Usando um projeto existente do TypeScript

Se você já tiver um projeto doTypeScript, poderá adicionar um gancho de pré-implantação para garantir que o projeto seja transcompilado toda vez que você implantar seu código no Cloud Functions para Firebase. Você precisará de um arquivo tsconfig.json devidamente formado e um projeto do Firebase, além de realizar todas as modificações abaixo na configuração do Firebase:

  1. Edite o arquivo package.json para adicionar um script de bash e criar seu projeto do TypeScript. Por exemplo:

     {
       "name": "functions",
       "scripts": {
         "build": "./node_modules/.bin/tslint -p tslint.json && ./node_modules/.bin/tsc"
       }
     ...
    
  2. Edite o arquivo firebase.json para adicionar um gancho de pré-implantação e executar o script de compilação. Por exemplo:

     {
       "functions": {
         "predeploy": "npm --prefix functions run build",
       }
     }
    

Com essa configuração, um comando firebase deploy --only functions cria seu código do TypeScript e o implanta como funções.

Como migrar um projeto existente do JavaScript para o TypeScript

Caso você já tenha um projeto do Cloud Functions que foi inicializado e desenvolvido usando JavaScript, será possível migrá-lo para o TypeScript. Antes de iniciar, recomendamos que você crie um ponto de verificação git ou outro backup.

Para migrar um projeto existente do Cloud Functions em JavaScript, siga as seguintes etapas:

  1. Crie um ponto de verificação git e salve cópias dos arquivos de origem do JavaScript existentes.
  2. No diretório do projeto, execute o comando firebase init functions e selecione TypeScript quando aparecer a opção para informar a linguagem em que você escreverá as funções.
  3. Selecione package.json quando aparecer uma mensagem perguntando se você quer substituir o arquivo package.json existente, a menos que não queira mantê-lo.
  4. Exclua index.ts no diretório functions/src e coloque seu código-fonte no lugar dele.
  5. No arquivo tsconfig.json criado na inicialização, defina as opções do compilador para permitir JavaScript: "allowJs": "true".
  6. Copie o arquivo package.json salvo no diretório functions e edite-o para definir "main" como "lib/index.js".
  7. Ainda no arquivo package.json, adicione um script de compilação no TypeScript, como mostrado abaixo:

     {
       "name": "functions",
       "scripts": {
         "build": "./node_modules/.bin/tslint --project tsconfig.json && ./node_modules/.bin/tsc"
       }
     ...
    
  8. Execute o comando npm install --save --only=dev tslint typescript para adicionar "typescript" como uma dependência de desenvolvedor.

  9. Para todas as dependências, execute o comando npm install --save @types/<dependency>.

  10. Reescreva o código-fonte de .js para .ts conforme desejado.

Emular funções do TypeScript

Para testar localmente as funções do TypeScript, você pode usar as ferramentas de emulação descritas em Executar funções localmente. É importante compilar seu código antes de usar essas ferramentas. Portanto, execute npm run build dentro do diretório de funções antes de executar as funções firebase serve ou firebase functions:shell. Como alternativa, execute npm run serve ou npm run shell como um atalho. Esses comandos executam a versão e exibem/iniciam o shell de funções.

Registros de funções para projetos do TypeScript

Durante o processo firebase deploy, o index.ts do seu projeto é transcompilado para index.js. Isso significa que o registro do Cloud Functions mostrará os números de linha do arquivo index.js e não do código que você escreveu. Para facilitar a localização dos caminhos e dos números de linha correspondentes no index.ts, o processo firebase deploy cria functions/lib/index.js.map. Use esse mapa de origem no seu ambiente de desenvolvimento integrado favorito ou por meio de um módulo de nó.