Specificare dipendenze in Node.js

A una funzione è consentito 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 di Cloud Functions supportano l'installazione utilizzando npm, filato o pnpm.

Per specificare una dipendenza per la funzione, aggiungila al file package.json.

In questo esempio, il file package.json indica una dipendenza:

{
  "dependencies": {
    "escape-html": "^1.0.3"
  }
}

La dipendenza viene quindi importata nella funzione:

const functions = require('@google-cloud/functions-framework');
const escapeHtml = require('escape-html');

/**
 * Responds to an HTTP request using data from the request body parsed according
 * to the "content-type" header.
 *
 * @param {Object} req Cloud Function request context.
 * @param {Object} res Cloud Function response context.
 */
functions.http('helloHttp', (req, res) => {
  res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
});

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

Il processo prevede due passaggi:

  1. Contrassegna l'ultima versione del modulo come dipendenza nel file package.json. Importante: Cloud Functions installa solo i moduli dichiarati nel file package.json.
  2. Scarica il modulo nella directory node_modules. Ciò consente di utilizzare il modulo in fase di sviluppo locale.

Se non hai installato npm, esegui npm.

Configurazione delle dipendenze di deployment

Puoi installare le dipendenze di produzione per NPM, Filato o Pnpm:

Gestione dei partner di rete

Quando esegui il deployment della tua 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 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 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 delle funzioni aggiungendo uno script gcp-build nel file package.json.

Quando viene eseguito questo script, sono disponibili le dipendenze nei campi dependencies e devDependencies del tuo file package.json. 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 sono presenti script gcp-build in package.json, Cloud Functions installa semplicemente 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 tua funzione utilizza una dipendenza che richiede un pacchetto non elencato, puoi richiedere un pacchetto.

Inclusione di moduli Node.js locali

La funzione può anche includere moduli Node.js locali. 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 che contiene il modulo:

{
  "dependencies": {
    "mymodule": "file:mymoduledir"
  }
}

Il codice per questo modulo locale deve essere archiviato in una posizione diversa dalla cartella node_modules nella directory principale della funzione.

Caricamento dei moduli Node.js in corso...

Utilizza la funzione Node.js require() per caricare i moduli Node.js installati. Puoi anche utilizzare la funzione require() per importare i file locali di cui esegui il deployment insieme alla funzione.

Usare moduli privati

Puoi utilizzare un modulo npm privato specificando le impostazioni per l'autenticazione con il registro in un file .npmrc nella directory della funzione. Se stai utilizzando Yan v2 o versione successiva come gestore di pacchetti, il nome di questo file è .yarnrc.yml.

Moduli privati da Artifact Registry

Un repository pacchetti di 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 nel tuo .npmrc senza generare credenziali aggiuntive. Ecco alcuni esempi:

@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 elencare solo il repository Artifact Registry nel tuo .yarnrc.yml senza credenziali aggiuntive. Ecco alcuni esempi:

npmScopes:
  SCOPE:
    npmRegistryServer: https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
    npmAlwaysAuth: true

Moduli privati di altri repository

La documentazione relativa al protocollo npm spiega come creare token di accesso di sola lettura personalizzati. È sconsigliato utilizzare il file .npmrc creato nella home directory, in quanto contiene un token di lettura e 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, perché potrebbe 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 tuo registro privato npm. Se il tuo repository è ospitato con npmjs.org, imposta questo campo su registry.npmjs.org.
  • AUTH_TOKEN: il token di autorizzazione per il tuo registro npm. Può essere il valore testo letterale del token o la stringa di testo ${NPM_TOKEN}, che npm 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 tuo comando gcloud functions deploy. Per ulteriori dettagli sul token di autenticazione NPM, consulta il tutorial di NPM sui moduli privati.