Catch up on everthing we announced at this year's Firebase Summit. Learn more

Como processar dependências

Uma função pode usar módulos Node.js externos, bem como dados locais. Dependências no Node.js são gerenciadas com npm e expressas em um arquivo de metadados chamado package.json. Os ambientes de execução Node.js para o Cloud Functions geralmente são compatíveis com a instalação usando npm ou yarn.

Para especificar uma dependência para sua função, adicione-a ao seu arquivo package.json.

Neste exemplo, uma dependência é listada no arquivo package.json:

{
  "dependencies": {
    "escape-html": "^1.0.3"
  }
}

Em seguida, a dependência é importada na função:

JavaScript

const escapeHtml = require('escape-html');

// Return a greeting with the input HTML-escaped.
exports.hello = functions.https.onRequest((req, res) => {
  res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
});

TypeScript

import * as escapeHtml from 'escape-html';

// Return a greeting with the input HTML-escaped.
export let hello = functions.https.onRequest((req, res) => {
  res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
}

Como incluir módulos Node.js locais

Também é possível incluir módulos Node.js como parte da sua função. Para isso, declare seu módulo em package.json usando o prefixo file:. No exemplo a seguir, mymodule refere-se ao nome do seu módulo e mymoduledir é o diretório que contém seu módulo:

{
  "dependencies": {
    "mymodule": "file:mymoduledir"
  }
}

O código desse módulo local precisa ser armazenado em algum lugar diferente da pasta node_modules, no diretório raiz da função.

Etapas adicionais do TypeScript

O TypeScript é mais útil com o uso de bibliotecas que têm informações de tipo. Isso permite que o TypeScript capture erros de sintaxe e ofereça aos editores sugestões de preenchimento automático melhores. Algumas bibliotecas, como firebase-admin e firebase-functions, já vêm com definições de TypeScript.

Muitas bibliotecas não oferecem definições próprias do TypeScript. O projeto DefinitelyTyped fornece definições mantidas pela comunidade para as bibliotecas de node mais conhecidas. O DefinitelyTyped publica essas definições com o mesmo nome do pacote NPM, mas dentro da organização "@types". Por exemplo, é possível instalar as informações de tipo para a biblioteca uuid com o seguinte:

npm install @types/uuid

Conforme você se familiarizar com o TypeScript, poderá combinar ambas as instalações:

npm install uuid @types/uuid

As dependências de tipo precisam ser do mesmo tipo que a dependência da biblioteca. Por exemplo, não se deve salvar uuid como uma dependência normal e @types/uuid como uma dependência de desenvolvedor ou de pares.

Como carregar módulos Node.js

Use a função require() do Node.js para carregar qualquer módulo Node.js que tiver instalado. Também é possível usar a função require() para importar arquivos locais implantados com sua função.

Se você estiver escrevendo funções no TypeScript, use a instrução import da mesma maneira para carregar qualquer módulo Node.js instalado.

Como usar módulos privados

Para usar um módulo npm privado, é preciso fornecer as credenciais (token de autenticação) do registro npm em um arquivo .npmrc localizado no diretório da função. A documentação do npm explica como criar tokens personalizados de acesso somente leitura. Não recomendamos a utilização do arquivo .npmrc criado no diretório pessoal, porque ele contém um token de leitura/gravação. Permissões de gravação não são necessárias durante a implantação e podem representar um risco de segurança.

Não inclua o arquivo .npmrc se você não estiver usando repositórios particulares, porque isso pode aumentar o tempo de implantação de suas funções.

Formato do arquivo

Se você estiver usando um arquivo .npmrc para definir um token de autenticação personalizado, ele precisará incluir a linha mostrada abaixo. Substitua <YOUR_AUTH_TOKEN> pelo token de autenticação fornecido pelo NPM.

//registry.npmjs.org/:_authToken=<YOUR_AUTH_TOKEN>