Una funzione può utilizzare moduli Node.js esterni e dati locali. Le dipendenze in Node.js vengono gestite con npm ed espresse in un file di metadati denominato package.json
. Puoi utilizzare npm,
yarn o pnpm per installare le dipendenze di Node.js.
Il framework Node.js Functions è una dipendenza obbligatoria per tutte le funzioni. Sebbene Cloud Run Functions lo installi per tuo conto quando viene creata la funzione, ti consigliamo di includerlo come dipendenza esplicita per chiarezza.
Se la tua funzione si basa su dipendenze private, ti consigliamo di
eseguire il mirroring di functions-framework
nel tuo registro privato. Includi functions-framework
sottoposto a mirroring come dipendenza della tua funzione per evitare di installare il pacchetto dalla rete internet pubblica.
Per specificare una dipendenza per la tua funzione, aggiungila al file package.json
.
In questo esempio, una dipendenza è elencata nel file package.json
:
{
"dependencies": {
"escape-html": "^1.0.3"
}
}
La dipendenza viene quindi importata nella funzione:
Utilizzo di npm
per installare localmente i moduli Node.js
Il modo più semplice per installare un modulo Node.js localmente è utilizzare il comando npm install
nella cartella contenente la funzione Cloud Run. Ad esempio, il seguente comando aggiunge il modulo uuid
:
npm install uuid
In questo modo, vengono combinati due passaggi:
- Contrassegna l'ultima versione del modulo come dipendenza nel file
package.json
. Questo è molto importante: Cloud Run Functions installa solo i moduli dichiarati nel filepackage.json
. - Il modulo viene scaricato nella directory
node_modules
. In questo modo, puoi utilizzare il modulo durante lo sviluppo locale.
Se non hai installato npm sul tuo computer, scarica npm.
Configurazione delle dipendenze del deployment
Puoi installare le dipendenze di produzione per NPM, Yarn o Pnpm:
NPM
Quando esegui il deployment della funzione, Cloud Run Functions installa le dipendenze dichiarate nel file package.json
utilizzando il comando npm install
:
npm install --production
Filo
Nel runtime Node.js 8 e versioni successive, se esiste un file yarn.lock
,
le funzioni Cloud Run utilizzano invece il comando
yarn install
:
yarn install --production
Pnpm
Nel runtime Node.js 8 e versioni successive, se esiste un file pnpm-lock.yaml
,
le funzioni Cloud Run utilizzano invece il comando
pnpm install
:
pnpm install
Esecuzione di passaggi di build personalizzati durante il deployment
Dopo il deployment, puoi eseguire un passaggio di build personalizzato durante la processo di compilazione della funzione aggiungendo uno script gcp-build
nel file package.json
.
Quando questo script viene eseguito, le dipendenze nei campi dependencies
e
devDependencies
del file package.json
sono disponibili. Dopo
l'esecuzione del passaggio di build personalizzato, Cloud Run Functions rimuove e
rigenera la cartella node_modules
installando solo le dipendenze di produzione
dichiarate nel campo dependencies
del file package.json
.
Se non è presente alcuno script gcp-build
in package.json
,
Cloud Run Functions installa solo le dipendenze di produzione.
Utilizzo dei pacchetti di sistema
Il runtime Node.js include anche una serie di pacchetti di sistema nell'ambiente di esecuzione.
Inclusione di moduli Node.js locali
Puoi anche includere moduli Node.js locali come parte della funzione. Puoi
ottenere questo risultato dichiarando il modulo in package.json
utilizzando il
prefisso file:
. Nell'esempio
seguente, mymodule
si riferisce al nome del modulo e mymoduledir
è
la directory contenente il modulo:
{
"dependencies": {
"mymodule": "file:mymoduledir"
}
}
Il codice di questo modulo locale deve essere archiviato in una posizione diversa dalla
cartella node_modules
all'interno della directory radice della funzione.
Caricamento dei moduli Node.js
Utilizza la funzione Node.js
require()
per caricare qualsiasi modulo Node.js che hai installato. Puoi anche utilizzare la funzione require()
per importare i file locali di cui esegui il deployment insieme alla funzione.
Utilizzo di moduli privati
Puoi utilizzare un modulo npm privato fornendo le impostazioni per l'autenticazione con
il registro in un file .npmrc
nella directory della funzione. Se utilizzi
Yarn v2 o versioni successive come gestore dei pacchetti, questo file si chiama
.yarnrc.yml
.
Moduli privati di Artifact Registry
Un repository di pacchetti Node.js di Artifact Registry
può ospitare moduli privati per la tua funzione. Quando esegui il deployment di una funzione Cloud Run Functions, il processo di compilazione genera automaticamente le credenziali di Artifact Registry per il service account Cloud Build.
Devi solo elencare il repository Artifact Registry in .npmrc
senza
generare credenziali aggiuntive. Ad esempio:
@SCOPE:registry=https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
//REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME:always-auth=true
Questo approccio funziona anche per il gestore di pacchetti Yarn v1.
Se utilizzi Yarn v2 o versioni successive, devi solo elencare il repository Artifact Registry in .yarnrc.yml
senza credenziali aggiuntive.
Ad esempio:
npmScopes:
SCOPE:
npmRegistryServer: https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
npmAlwaysAuth: true
Moduli privati di altri repository
La documentazione di npm spiega come creare token di accesso personalizzati di sola lettura. Sconsigliamo l'utilizzo del file .npmrc
creato nella directory home perché contiene un token di lettura/scrittura. Le autorizzazioni di scrittura non sono
richieste durante l'implementazione e potrebbero rappresentare un rischio per la sicurezza.
Non includere il file .npmrc
se non utilizzi repository privati,
in quanto può aumentare il tempo di deployment delle tue funzioni.
Formato file
Se utilizzi un file .npmrc
per impostare un token di autenticazione personalizzato, deve includere
la seguente riga.
//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN
Sostituisci:
- REGISTRY_DOMAIN: il nome di dominio del tuo registro npm privato. Se il tuo repository è ospitato su
npmjs.org
, imposta questo campo suregistry.npmjs.org
. AUTH_TOKEN: il token di autorizzazione per il tuo registro npm. Può trattarsi del valore di testo letterale del token o della stringa di testo
${NPM_TOKEN}
, chenpm
sostituisce con il valore effettivo del token dell'ambiente.Puoi impostare la variabile di ambiente
$NPM_TOKEN
con l'argomento--set-build-env-vars
del comandogcloud functions deploy
. Per ulteriori dettagli sul token di autenticazione NPM, consulta il tutorial NPM sui moduli privati.
Crea la funzione con le dipendenze copiate
Le dipendenze copiate sono quelle la cui origine è inclusa direttamente
nel pacchetto del codice sorgente e ricompilate insieme al tuo codice.
Crea dipendenze Node.js copiate e salta l'installazione
durante il deployment utilizzando la
variabile di ambiente di build GOOGLE_VENDOR_NPM_DEPENDENCIES
.
Prerequisiti per le dipendenze copiate
Assicurati di avere una funzione funzionante con tutte le dipendenze che vuoi copiare nel file
package.json
.Installa queste dipendenze localmente eseguendo:
npm install
Rimuovi
node_modules
dal file.gcloudignore
nella directory di lavoro.Esegui il deployment della funzione, assicurandoti che la versione locale di Node.js sia la stessa di quella specificata durante il deployment.
Esegui il deployment della funzione e delle dipendenze copiate con il comando seguente:
gcloud run deploy SERVICE \ --source . \ --function FUNCTION_ENTRY_POINT \ --set-build-env-vars GOOGLE_VENDOR_NPM_DEPENDENCIES=true
Sostituisci:
- SERVICE: il nome della funzione Cloud Run che stai eseguendo il deployment
- FUNCTION_ENTRY_POINT: con il punto di ingresso alla tua funzione nel codice sorgente.
Se specifichi un motore npm nel file package.json
, la versione
specificata di npm viene scaricata al momento della build. Per disattivare questo comportamento, rimuovilo
dal file package.json
.