Como especificar dependências no Node.js

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:

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

/**
 * HTTP Cloud Function.
 *
 * @param {Object} req Cloud Function request context.
 *                     More info: https://expressjs.com/en/api.html#req
 * @param {Object} res Cloud Function response context.
 *                     More info: https://expressjs.com/en/api.html#res
 */
exports.helloHttp = (req, res) => {
  res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
};

Como instalar dependências durante a implantação

Ao implantar a função, o Cloud Functions instala as dependências declaradas no arquivo package.json usando o comando npm install:

npm install --production

No ambiente de execução Node.js 8 e superior, se um arquivo yarn.lock existir, o Cloud Functions usará o comando yarn install:

yarn install --production

Como executar etapas de versão personalizadas durante a implantação

Durante a implantação, antes de iniciar o aplicativo, é possível realizar uma etapa de versão personalizada adicionando um script gcp-build no arquivo package.json.

Ao executar este script, as dependências nos campos dependencies e devDependencies do arquivo package.json estarão disponíveis. Após a execução da etapa de versão personalizada, o Cloud Functions removerá e regenerará a pasta node_modules instalando apenas as dependências de produção declaradas no campo dependencies do seu arquivo package.json.

Se não houver script gcp-build em package.json, o Cloud Functions apenas instalará as dependências de produção.

Como usar pacotes do sistema

O ambiente de execução Node.js também inclui vários pacotes do sistema no ambiente de execução. Se a função usa uma dependência que exija um pacote que não esteja listado, será possível solicitar um pacote.

Como incluir módulos Node.js locais como parte do seu pacote de implantação

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 se refere ao nome do seu módulo. Já mymoduledir é o diretório contendo seu módulo:

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

O código para este módulo local não deve estar na sua pasta node_modules. É possível armazená-lo na raiz do diretório da sua função.

Como usar npm para instalar os módulos Node.js localmente

A maneira mais fácil de instalar um módulo Node.js localmente é usar o comando npm install na pasta que contém o Cloud Function. Por exemplo, o seguinte comando adiciona o módulo uuid:

npm install uuid

Esse processo combina duas etapas:

  1. Ele marca a versão mais recente do módulo como uma dependência no seu arquivo package.json. Importante: o Cloud Functions instala apenas módulos que são declarados em seu arquivo package.json.
  2. Ele faz o download do módulo no diretório node_modules. Isso permite que você use o módulo ao desenvolver localmente.

Se você não tiver o NPM instalado na sua máquina, faça o download aqui.

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 os arquivos locais implantados com sua função.

Usar módulos particulares

Para usar um módulo NPM particular, é preciso fornecer credenciais (token de autenticação) para o 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 obrigató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 implementação de suas funções.