Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Como lidar com dependências

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Uma função pode usar módulos externos do Node.js, bem como dados locais. As 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 do Cloud Functions Node.js 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 arquivo package.json .

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

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

A dependência é então 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')}!`);
}

Incluindo módulos Node.js locais

Você também pode incluir módulos Node.js locais como parte de sua função. Você pode conseguir isso declarando seu módulo em package.json usando o file: prefix . 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 para este módulo local deve ser armazenado em algum lugar diferente da pasta node_modules dentro do diretório raiz da sua função.

Etapas adicionais para TypeScript

O TypeScript é mais útil quando você usa bibliotecas que possuem informações de tipo. Isso permite que o TypeScript detecte erros de sintaxe e permite que os editores forneçam melhores sugestões de preenchimento automático. Algumas bibliotecas, como firebase-admin e firebase-functions , são fornecidas com definições de TypeScript incluídas.

Muitas bibliotecas não fornecem sua própria definição de TypeScript. O projeto Definitivamente Typed fornece definições mantidas pela comunidade para as bibliotecas de nós mais populares. DefinitivamenteTyped publica essas definições com o mesmo nome de pacote NPM, mas dentro da organização "@types". Por exemplo, você pode instalar as informações de tipo para a biblioteca uuid com o seguinte:

npm install @types/uuid

À medida que você se familiariza com o TypeScript, você pode combinar as duas instalações:

npm install uuid @types/uuid

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

Carregando módulos Node.js

Use a função require() do Node.js para carregar qualquer módulo Node.js que você instalou. Você também pode usar a função require() para importar arquivos locais que você implanta junto com sua função.

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

Usando módulos privados

Você pode usar um módulo npm privado fornecendo configurações para autenticação com o registro em um arquivo .npmrc no diretório da função.

Módulos privados do Artifact Registry

Um repositório de pacotes Node.js do Artifact Registry pode hospedar módulos privados para sua função. Ao implantar no Cloud Functions, o processo de compilação gerará automaticamente as credenciais do Artifact Registry para a conta de serviço do Cloud Build . Você só precisa listar o repositório do Artifact Registry em seu .npmrc sem gerar credenciais adicionais. Por exemplo:

@SCOPE:registry=https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
//REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME:always-auth=true

Módulos privados de outros repositórios

A documentação do npm explica como criar tokens de acesso somente leitura personalizados. Desencorajamos o uso do arquivo .npmrc criado no diretório inicial porque ele contém um token de leitura/gravação. As 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 privados, pois isso pode aumentar o tempo de implantação de suas funções.

Formato de arquivo

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

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