Specifica le dipendenze in Node.js
Una funzione può utilizzare moduli Node.js esterni e dati
locali. Le dipendenze in Node.js sono gestite con npm ed espresse in un
file di metadati denominato package.json
. I runtime Node.js di Cloud Functions supportano l'installazione tramite npm, yarn o pnpm.
Per specificare una dipendenza per la 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:
Il framework delle funzioni è una dipendenza obbligatoria per tutte le funzioni. Sebbene Cloud Functions la installi per tuo conto al momento della creazione della funzione, ti consigliamo di includerla come dipendenza esplicita per chiarezza.
Se la funzione si basa su dipendenze private, ti consigliamo di eseguire il mirroring di functions-framework
nel registro privato. Includi l'oggetto functions-framework
con mirroring come dipendenza dalla funzione per evitare di installare il pacchetto dalla rete internet pubblica.
Utilizzo di npm
per installare i moduli Node.js in locale
Il modo più semplice per installare un modulo Node.js in locale è utilizzare il comando npm install
nella cartella contenente la funzione Cloud Function. Ad esempio, il seguente comando aggiunge il modulo uuid
:
npm install uuid
Questo combina due passaggi:
- Contrassegna l'ultima versione del modulo come dipendenza nel file
package.json
. Questo è molto importante: Cloud Functions installa solo i moduli dichiarati nel tuo filepackage.json
. - Il modulo viene scaricato nella directory
node_modules
. In questo modo puoi utilizzare il modulo durante lo sviluppo locale.
Se npm non è installato sulla tua macchina, get npm.
Configurazione delle dipendenze del deployment
Puoi installare le dipendenze di produzione per Gestione dei partner di rete, Yarn o Pnpm:
Gestione dei partner di rete
Quando esegui il deployment della funzione, Cloud Functions installa le dipendenze dichiarate nel file package.json
utilizzando il comando npm install
:
npm install --production
Filato
Nel runtime Node.js 8 e versioni successive, se esiste un file yarn.lock
, Cloud Functions utilizza invece il comando yarn install
:
yarn install --production
PNPM
Nel runtime Node.js 8 e versioni successive, se esiste un file pnpm-lock.yaml
, Cloud Functions utilizza 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 il processo di compilazione della funzione aggiungendo uno script gcp-build
nel file package.json
.
Quando viene eseguito questo script, le dipendenze nei campi dependencies
e
devDependencies
del file package.json
sono disponibili. Dopo
aver eseguito il passaggio di build personalizzato, Cloud Functions rimuove e
rigenera la cartella node_modules
installando solo le dipendenze di produzione dichiarate nel campo dependencies
del file package.json
.
Se non esiste uno script gcp-build
in package.json
, Cloud Functions
installa 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. Se la funzione utilizza una dipendenza che richiede un pacchetto non elencato, puoi richiedere un pacchetto.
Inclusione di moduli Node.js locali
Puoi anche includere moduli Node.js locali nella 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 per questo modulo locale deve essere archiviato in una posizione diversa dalla cartella node_modules
all'interno della directory principale 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 dei moduli privati
Puoi utilizzare un modulo npm privato fornendo le impostazioni per l'autenticazione
nel registro in un file .npmrc
nella directory della funzione. Se utilizzi
Yarn v2 o versioni successive come gestore di pacchetti, il nome di questo file è
.yarnrc.yml
.
Moduli privati da Artifact Registry
Un repository di pacchetti Artifact Registry Node.js
può ospitare moduli privati per la tua funzione. Quando esegui il deployment di una funzione Cloud Functions, il processo di compilazione genera automaticamente le credenziali Artifact Registry per l'account di servizio 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 da altri repository
La documentazione npm spiega come creare token di accesso
di sola lettura personalizzati. Sconsigliamo di utilizzare il file .npmrc
creato nella home directory perché contiene un token di lettura-scrittura. Le autorizzazioni di scrittura non sono necessarie durante il deployment e potrebbero rappresentare un rischio per la sicurezza.
Non includere il file .npmrc
se non utilizzi repository privati,
in quanto può aumentare i tempi di deployment delle funzioni.
Formato file
Se utilizzi un file .npmrc
per impostare un token di autenticazione personalizzato, dovrebbe includere la riga mostrata di seguito.
//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN
Sostituisci:
- REGISTRY_DOMAIN: il nome di dominio del registro npm privato. Se il repository è ospitato con
npmjs.org
, imposta questo campo suregistry.npmjs.org
. AUTH_TOKEN: il token di autorizzazione per il registro npm. Può essere il valore di testo letterale del token o la stringa di testo
${NPM_TOKEN}
, chenpm
sostituisce con il valore effettivo del token dall'ambiente.Puoi impostare la variabile di ambiente
$NPM_TOKEN
con l'argomento--set-build-env-vars
sul comandogcloud functions deploy
. Per ulteriori dettagli sul token di autenticazione NPM, vedi il tutorial sulla gestione dei partner di rete sui moduli privati.
Crea la tua funzione con dipendenze del fornitore
Le dipendenze del fornitore sono quelle la cui sorgente è inclusa direttamente nel pacchetto di codice sorgente e ricostruita insieme al tuo codice. Puoi creare dipendenze Node.js fornite dal fornitore e saltare l'installazione durante il deployment utilizzando la variabile di ambiente di build GOOGLE_VENDOR_NPM_DEPENDENCIES.
Prerequisiti per le dipendenze del fornitore
Assicurati di avere una funzione funzionante con tutte le dipendenze definite dal fornitore nel file
package.json
.Installa queste dipendenze in locale 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 specificata durante il deployment.
Esegui il deployment della funzione e delle dipendenze del fornitore con il seguente comando:
gcloud functions deploy FUNCTION_NAME \ --runtime RUNTIME_NAME \ --set-build-env-vars GOOGLE_VENDOR_NPM_DEPENDENCIES=true
Sostituisci:
- FUNCTION_NAME: il nome della funzione Cloud Functions di cui stai eseguendo il deployment
- RUNTIME_NAME: il nome del runtime Node.js in cui eseguire la funzione di cui hai eseguito il deployment. Deve essere la stessa versione di Node.js che hai utilizzato nel tuo ambiente di sviluppo locale.
Il pacchetto del framework Functions è una dipendenza obbligatoria per le funzioni. Per velocizzare le build, consigliamo il fornitore di questo pacchetto. In caso contrario, l'app viene scaricata e installata quando viene creata la funzione.
Se specifichi un motore npm nel file package.json, la versione specificata di npm viene scaricata al momento della build. Per sopprimere questo comportamento, rimuovilo dal file package.json.