Specificare le dipendenze in Node.js
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
. I runtime Node.js delle funzioni Cloud Run supportano l'installazione utilizzando 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 poi importata nella funzione:
Functions Framework è una dipendenza obbligatoria per tutte le funzioni. Sebbene le funzioni Cloud Run lo installino per tuo conto al momento della creazione della funzione, ti consigliamo di includerlo come dipendenza esplicita per maggiore chiarezza.
Se la funzione si basa su dipendenze private, ti consigliamo di eseguire il mirroring di functions-framework
nel tuo registry privato. Includi functions-framework
sottoposto a mirroring come dipendenza della funzione per evitare di installare il pacchetto dalla rete internet pubblica.
Utilizzo di npm
per installare i moduli Node.js localmente
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 comando seguente aggiunge il modulo uuid
:
npm install uuid
che combina due passaggi:
- Contrassegni la versione più recente del modulo come dipendenza nel file
package.json
. Questo è molto importante: le funzioni Cloud Run installano 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 npm non è installato sulla tua macchina, scaricalo.
Configurazione delle dipendenze di deployment
Puoi installare le dipendenze di produzione per NPM, Yarn o Pnpm:
NPM
Quando esegui il deployment della funzione, Cloud Run 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
,
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 compilazione personalizzati durante il deployment
Dopo il deployment, puoi eseguire un
passaggio di compilazione personalizzato durante il processo di compilazione della funzione aggiungendo un
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
l'esecuzione del passaggio di compilazione personalizzato, le funzioni Cloud Run rimuovono e rigenerano la cartella node_modules
installando solo le dipendenze di produzione dichiarate nel campo dependencies
del file package.json
.
Se non è presente uno script gcp-build
in package.json
, le funzioni Cloud Run
installano solo le dipendenze di produzione.
Utilizzo dei pacchetti di sistema
Il runtime di Node.js include anche una serie di pacchetti di sistema nell'ambiente di esecuzione. Se la tua 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 all'interno della funzione. Puoi
ottenere questo risultato dichiarando il modulo in package.json
utilizzando il
prefisso file:
. Nel
seguente esempio, mymodule
fa riferimento 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 un luogo diverso dalla
node_modules
cartella 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 di moduli privati
Puoi utilizzare un modulo npm privato fornendo le impostazioni per l'autenticazione con il registry in un file .npmrc
nella directory della funzione. Se utilizzi
Yarn 2.0 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, il processo di compilazione genera automaticamente le credenziali di 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 dei pacchetti Yarn 1.
Se utilizzi Yarn 2.0 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 di utilizzare il file .npmrc
creato nella directory home perché contiene un token di lettura/scrittura. Le autorizzazioni di scrittura non sono obbligatorie durante il deployment e potrebbero rappresentare un rischio per la sicurezza.
Non includere il file .npmrc
se non utilizzi repository privati, poiché questo può aumentare il tempo di implementazione delle funzioni.
Formato file
Se utilizzi un file .npmrc
per impostare un token di autenticazione personalizzato, deve includere la riga riportata di seguito.
//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN
Sostituisci:
- REGISTRY_DOMAIN: il nome di dominio del tuo registry 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 registry 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
per il comandogcloud functions deploy
. Per ulteriori dettagli sul token di autenticazione NPM, consulta il tutorial di NPM sui moduli privati.
Creare la funzione con dipendenze del fornitore
Le dipendenze del fornitore sono quelle il cui codice sorgente è incluso direttamente nel pacchetto di codice sorgente e viene ricostruito insieme al tuo codice. Puoi creare dipendenze Node.js di terze parti e saltarne l'installazione durante il deployment utilizzando la variabile di ambiente di compilazione GOOGLE_VENDOR_NPM_DEPENDENCIES.
Prerequisiti per le dipendenze del fornitore
Assicurati di avere una funzione funzionante con tutte le dipendenze che vuoi che il fornitore definisca 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 di Node.js locale sia la stessa di quella 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 Run Functions che stai eseguendo il deployment
- RUNTIME_NAME: il nome del runtime Node.js su cui eseguire la funzione di cui è stato eseguito il deployment. Deve essere la stessa versione di Node.js utilizzata nell'ambiente di sviluppo locale
Il pacchetto del framework Functions è una dipendenza obbligatoria per le funzioni. Per build più rapide, consigliamo di acquistare questo pacchetto. In caso contrario, viene scaricata e installata al momento della compilazione della funzione.
Se specifichi un motore npm nel file package.json, la versione di npm specificata viene scaricata in fase di compilazione. Per eliminare questo comportamento, rimuovilo dal file package.json.