Especifique dependências no Node.js
Uma função pode usar módulos Node.js externos, bem como dados locais. As dependências no Node.js são geridas com o npm e expressas num ficheiro de metadados denominado package.json
. Os tempos de execução do Node.js das funções do Cloud Run suportam a instalação através do npm, yarn ou pnpm.
Para especificar uma dependência para a sua função, adicione-a ao ficheiro package.json
.
Neste exemplo, é apresentada uma dependência no ficheiro package.json
:
{ "dependencies": { "escape-html": "^1.0.3" } }
A dependência é, em seguida, importada na função:
O Functions Framework é uma dependência obrigatória para todas as funções. Embora o Cloud Run Functions o instale em seu nome quando a função é criada, recomendamos que o inclua como uma dependência explícita para maior clareza.
Se a sua função depender de dependências privadas, recomendamos que
duplique functions-framework
no seu registo privado. Inclua o pacote functions-framework
duplicado como uma dependência da sua função para evitar a instalação do pacote a partir da Internet pública.
Usar npm
para instalar módulos Node.js localmente
A forma mais fácil de instalar um módulo Node.js localmente é usar o comando npm install
na pasta que contém a sua função. Por exemplo, o comando seguinte adiciona o módulo uuid
:
npm install uuid
Isto combina dois passos:
- Marca a versão mais recente do módulo como uma dependência no ficheiro
package.json
. Isto é muito importante: as funções do Cloud Run só instalam módulos declarados no ficheiropackage.json
. - Transfere o módulo para o diretório
node_modules
. Isto permite-lhe usar o módulo quando desenvolve localmente.
Se não tiver o npm instalado no seu computador, obtenha o npm.
Configurar dependências de implementação
Pode instalar dependências de produção para NPM, Yarn ou Pnpm:
NPM
Quando implementa a sua função, as funções do Cloud Run instalam as dependências declaradas no ficheiro package.json
usando o comando npm install
:
npm install --production
Fio
No tempo de execução do Node.js 8 e superior, se existir um ficheiro yarn.lock
,
as funções do Cloud Run usam, em alternativa, o comando
yarn install
:
yarn install --production
Pnpm
No tempo de execução do Node.js 8 e superior, se existir um ficheiro pnpm-lock.yaml
,
as funções do Cloud Run usam, em alternativa, o comando
pnpm install
:
pnpm install
Executar passos de compilação personalizados durante a implementação
Após a implementação, pode executar um passo de compilação personalizado durante o processo de compilação da função adicionando um script gcp-build
no ficheiro package.json
.
Quando este script é executado, as dependências nos campos dependencies
e devDependencies
do seu ficheiro package.json
estão disponíveis. Depois de executar o passo de compilação personalizado, as funções do Cloud Run removem e regeneram a pasta node_modules
instalando apenas as dependências de produção declaradas no campo dependencies
do ficheiro package.json
.
Se não existir nenhum script gcp-build
em package.json
, as funções do Cloud Run
instalam apenas dependências de produção.
Usar pacotes do sistema
O tempo de execução do Node.js também inclui vários pacotes do sistema no ambiente de execução. Se a sua função usar uma dependência que requer um pacote que não está listado, pode pedir um pacote.
Incluir módulos Node.js locais
Também pode incluir módulos Node.js locais como parte da sua função. Pode
consegui-lo declarando o seu módulo em package.json
através do prefixo file:
. No exemplo seguinte, mymodule
refere-se ao nome do módulo e mymoduledir
é o diretório que contém o módulo:
{ "dependencies": { "mymodule": "file:mymoduledir" } }
O código deste módulo local deve ser armazenado num local diferente da pasta node_modules
no diretório raiz da sua função.
Carregar módulos Node.js
Use a função Node.js
require()
para carregar qualquer módulo Node.js que tenha instalado. Também pode usar a função require()
para importar ficheiros locais que implementa juntamente com a sua função.
Usar módulos privados
Pode usar um módulo npm privado fornecendo definições para autenticação com o registo num ficheiro .npmrc
no diretório da função. Se estiver a usar o Yarn v2 ou superior como gestor de pacotes, este ficheiro tem o nome .yarnrc.yml
.
Módulos privados do Artifact Registry
Um repositório de pacotes do Node.js do Artifact Registry
pode alojar módulos privados para a sua função. Quando implementa uma função do Cloud Run, o processo de compilação gera automaticamente credenciais do Artifact Registry para a conta de serviço do Cloud Build.
Só tem de listar o repositório do Artifact Registry no 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
Esta abordagem também funciona para o gestor de pacotes Yarn v1.
Se estiver a usar o Yarn v2 ou superior, só precisa de listar o repositório do Artifact Registry no seu .yarnrc.yml
sem credenciais adicionais.
Por exemplo:
npmScopes:
SCOPE:
npmRegistryServer: https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
npmAlwaysAuth: true
Módulos privados de outros repositórios
A documentação do npm explica como criar tokens de acesso personalizados de
só de leitura. Desaconselhamos a utilização do ficheiro .npmrc
criado no diretório inicial, uma vez que contém um token de leitura/escrita. As autorizações de escrita não são
necessárias durante a implementação e podem representar um risco de segurança.
Não inclua o ficheiro .npmrc
se não estiver a usar repositórios privados,
uma vez que pode aumentar o tempo de implementação das suas funções.
Formato de ficheiro
Se estiver a usar um ficheiro .npmrc
para definir um token de autorização personalizado, este deve incluir a linha apresentada abaixo.
//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN
Substituição:
- REGISTRY_DOMAIN: o nome de domínio do seu registo npm privado. Se o seu repositório estiver alojado com
npmjs.org
, defina este campo comoregistry.npmjs.org
. AUTH_TOKEN: o token de autorização para o seu registo 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.Pode 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 ver mais detalhes do token de autorização do NPM.
Crie a sua função com dependências de fornecedores
As dependências de fornecedores são aquelas cuja origem está incluída diretamente no pacote de código-fonte e são reconstruídas juntamente com o seu próprio código. Crie dependências do Node.js de fornecedores e ignore a instalação das mesmas durante a implementação através da variável de ambiente de compilação GOOGLE_VENDOR_NPM_DEPENDENCIES.
Pré-requisitos para dependências de fornecedores
Certifique-se de que tem uma função funcional com todas as dependências que quer definidas pelo fornecedor no seu ficheiro
package.json
.Instale estas dependências localmente executando:
npm install
Remova
node_modules
do ficheiro .gcloudignore no diretório de trabalho.Implemente a função, garantindo que a versão local do Node.js é a mesma que especifica durante a implementação.
Implemente a sua função e as dependências de fornecedores com o seguinte comando:
gcloud functions deploy FUNCTION_NAME \ --runtime RUNTIME_NAME \ --set-build-env-vars GOOGLE_VENDOR_NPM_DEPENDENCIES=true
Substituição:
- FUNCTION_NAME: o nome da função do Cloud Functions que está a implementar
- RUNTIME_NAME: o nome do tempo de execução do Node.js para executar a sua função implementada. Tem de ser a mesma versão do Node.js que usou no seu ambiente de desenvolvimento local
O pacote da framework Functions é uma dependência necessária para as funções. Para compilações mais rápidas, recomendamos que use este pacote. Caso contrário, é transferida e instalada quando a função é criada.
Se especificar um motor npm no ficheiro package.json, a versão especificada do npm é transferida no momento da compilação. Para suprimir este comportamento, remova-o do ficheiro package.json.