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
. Pode usar o npm, o yarn ou o pnpm para instalar dependências do Node.js.
O Functions Framework do 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 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.
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:
Usar npm
para instalar módulos Node.js localmente
A forma mais fácil de instalar um módulo do Node.js localmente é usar o comando npm install
na pasta que contém a sua função do Cloud Run. Por exemplo, o seguinte comando 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 seu 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
através do 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 um guião gcp-build
em package.json
, as funções do Cloud Run apenas instalam 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.
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
usando o 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 chama-se .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 Functions, 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 seguinte linha.
//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN
Substituir:
- 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 copiadas
As dependências copiadas são aquelas cuja origem está incluída diretamente no pacote de código-fonte e são recompiladas juntamente com o seu próprio código.
Cria dependências do Node.js copiadas e ignora 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 copiadas
Certifique-se de que tem uma função funcional com todas as dependências que quer copiar no seu ficheiro
package.json
.Instale estas dependências localmente executando:
npm install
Remova
node_modules
do ficheiro.gcloudignore
no seu 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 copiadas com o seguinte comando:
gcloud run deploy SERVICE \ --source . \ --function FUNCTION_ENTRY_POINT \ --set-build-env-vars GOOGLE_VENDOR_NPM_DEPENDENCIES=true
Substituir:
- SERVICE: o nome da função do Cloud Run que está a implementar
- FUNCTION_ENTRY_POINT: com o ponto de entrada da sua função no código fonte.
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
.