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
. Você pode usar o npm, o yarn ou o pnpm para instalar dependências do Node.js.
O Functions Framework para Node.js é uma dependência necessária para todas as funções. Embora as funções do Cloud Run o instalem em seu nome quando a função é criada, recomendamos que você a inclua como uma dependência explícita para maior clareza.
Se a função depende de dependências particulares, recomendamos que você
espelhe functions-framework
no registro particular. Inclua o functions-framework
espelhado como uma dependência da sua função para evitar a instalação do
pacote pela Internet pública.
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:
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 a função do Cloud Run. Por
exemplo, o comando a seguir adiciona o módulo uuid
:
npm install uuid
Esse processo combina duas etapas:
- Ele marca a versão mais recente do módulo como uma dependência em seu arquivo
package.json
. Importante: as funções do Cloud Run instalam apenas módulos declarados no arquivopackage.json
. - 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.
Como configurar dependências de implantação
É possível instalar dependências de produção para NPM, Yarn ou Pnpm:
NPM
Ao implantar a função, as funções do Cloud Run instalam
as dependências declaradas no arquivo package.json
usando o comando
npm install
:
npm install --production
Yarn
No ambiente de execução Node.js 8 e superior, se um arquivo yarn.lock
existir,
as funções do Cloud Run usarão o comando
yarn install
:
yarn install --production
Pnpm
No ambiente de execução Node.js 8 e superior, se um arquivo pnpm-lock.yaml
existir,
as funções do Cloud Run usarão o comando
pnpm install
:
pnpm install
Como executar etapas de versão personalizadas durante a implantação
Depois de implantar, é possível executar uma etapa de
compilação personalizada durante o processo de compilação da função adicionando um
gcp-build
script
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, as funções do Cloud Run 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 um script gcp-build
em package.json
,
as funções do Cloud Run apenas instalarão as dependências de produção.
Como usar pacotes do sistema
O ambiente de execução do Node.js também inclui vários pacotes do sistema no ambiente de execução.
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
se refere ao nome do seu módulo, e mymoduledir
é
o diretório que contém o 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.
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 privados
É possível usar um módulo npm particular. Para isso, basta fornecer configurações para autenticar com
o registro em um arquivo .npmrc
no diretório da função. Se você estiver usando o Yarn v2 ou versão mais recente como gerenciador de pacotes, esse arquivo será chamado de .yarnrc.yml
.
Módulos particulares do Artifact Registry
Um repositório de pacotes Node.js do Artifact Registry
pode hospedar módulos particulares para sua função. Quando você implanta uma função do Cloud Run, o processo de build gera automaticamente credenciais do Artifact Registry para a conta de serviço do Cloud Build.
Você só precisa listar o repositório do Artifact Registry no .npmrc
sem
gerar outras credenciais. 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
Essa abordagem também funciona para o gerenciador de pacotes Yarn v1.
Se você estiver usando o Yarn v2 ou mais recente, basta listar o repositório do Artifact Registry
no .yarnrc.yml
sem credenciais adicionais.
Por exemplo:
npmScopes:
SCOPE:
npmRegistryServer: https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
npmAlwaysAuth: true
Módulos particulares de outros repositórios
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 implantação das 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 a seguir.
//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN
Substitua:
- REGISTRY_DOMAIN: o nome de domínio do registro
npm particular. Se o repositório estiver hospedado em
npmjs.org
, defina esse campo comoregistry.npmjs.org
. AUTH_TOKEN: o token de autorização para o registro npm. Pode ser o valor de texto literal do token ou a string de texto
${NPM_TOKEN}
, quenpm
substitui pelo valor real do token do ambiente.É possível definir a variável de ambiente
$NPM_TOKEN
com o argumento--set-build-env-vars
para o comandogcloud functions deploy
. Consulte o tutorial do NPM sobre módulos privados para mais detalhes do token de autenticação.
Criar uma função com dependências copiadas
Dependências copiadas são aquelas em que a origem é incluída diretamente
no pacote de código-fonte e recriada com seu próprio código.
Use a variável de ambiente de build GOOGLE_VENDOR_NPM_DEPENDENCIES
para criar dependências do Node.js copiadas e pular a instalação delas
durante a implantação.
Pré-requisitos para dependências copiadas
Verifique se você tem uma função ativa com todas as dependências que você quer copiar no arquivo
package.json
.Instale essas dependências localmente executando:
npm install
Remova
node_modules
do arquivo.gcloudignore
no diretório de trabalho.Implante a função, garantindo que a versão do Node.js local seja a mesma especificada durante a implantação.
Implante a função e as dependências copiadas com o seguinte comando:
gcloud run deploy SERVICE \ --source . \ --function FUNCTION_ENTRY_POINT \ --set-build-env-vars GOOGLE_VENDOR_NPM_DEPENDENCIES=true
Substitua:
- SERVICE: o nome da função do Cloud Run que você está implantando.
- FUNCTION_ENTRY_POINT: com o ponto de entrada da função no código-fonte.
Se você especificar um mecanismo NPM no arquivo package.json
, o download da versão especificada do NPM será feito no momento do build. Para suprimir esse comportamento, remova-o
do arquivo package.json
.