Specifica le dipendenze in Node.js

Una funzione può utilizzare moduli Node.js esterni e locali e i dati di Google Cloud. Le dipendenze in Node.js vengono gestite con npm ed espresse in un denominato package.json. Le funzioni Cloud Functions I runtime Node.js 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:

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')}!`);
});

Il framework delle funzioni è un la dipendenza richiesta per tutte le funzioni. Sebbene Cloud Functions lo installi per tuo conto quando viene creata la funzione, ti consigliamo includerla come dipendenza esplicita per maggiore chiarezza.

Se la funzione si basa su dipendenze private, ti consigliamo di esegui il mirroring di functions-framework nel tuo registro privato. Includi lo stato functions-framework come dipendenza dalla tua funzione per evitare di installare il componente 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 localmente è utilizzare l'npm install nella cartella contenente la Cloud Function. Ad esempio, questo comando aggiunge il modulo uuid:

npm install uuid

Questo combina due passaggi:

  1. Contrassegna l'ultima versione del modulo come dipendenza nel tuo package.json. Questo è molto importante: solo Cloud Functions moduli di installazione dichiarati nel tuo file package.json.
  2. Il modulo viene scaricato nella directory node_modules. Questo consente di puoi utilizzare il modulo durante lo sviluppo locale.

Se npm non è installato sulla 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 dichiarata nel file package.json utilizzando 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 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 Comando pnpm install:

pnpm install

Esecuzione di passaggi di build personalizzati durante il deployment

Dopo il deployment, puoi eseguire una durante il processo di compilazione della funzione aggiungendo un'istruzione Script gcp-build nel file package.json.

Quando viene eseguito questo script, le dipendenze in dependencies e devDependencies campi del file package.json sono disponibili. Dopo il giorno eseguendo il passaggio di build personalizzato, Cloud Functions rimuove rigenera la cartella node_modules installando solo delle dipendenze dichiarate nel campo dependencies del file package.json.

Se non esiste uno script gcp-build in package.json, Cloud Functions si limita a installare 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 richiedi un pacco.

Inclusione di moduli Node.js locali

Puoi anche includere moduli Node.js locali nella funzione. Puoi raggiungere questo obiettivo dichiarando il tuo modulo in package.json utilizzando il Prefisso file:. Nella nell'esempio seguente, mymodule si riferisce al nome del modulo e mymoduledir è nella directory contenente il modulo:

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

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

Caricamento dei moduli Node.js

Utilizzare Node.js require() per caricare qualsiasi modulo Node.js che hai installato. Puoi utilizzare anche require() per importare i file locali di cui esegui il deployment insieme alla funzione.

Utilizzo dei moduli privati

Puoi utilizzare un modulo di gestione dei partner privato fornendo le impostazioni per l'autenticazione con al registro in un file .npmrc nella directory della funzione. Se utilizzi Yarn v2 o superiore come gestore di pacchetti, questo file è denominato .yarnrc.yml.

Moduli privati da Artifact Registry

Un repository di pacchetti Node.js di Artifact Registry puoi ospitare moduli privati per la tua funzione. Quando esegui il deployment di un 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 generando 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 elencare solo Artifact Registry repository 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 impostazioni di sola lettura personalizzate. di accesso ai token di accesso. È sconsigliato utilizzare il file .npmrc creato in casa perché contiene un token di lettura/scrittura. Le autorizzazioni di scrittura non sono necessarie durante il deployment e potrebbe rappresentare un rischio per la sicurezza.

Non includere il file .npmrc se non utilizzi repository privati. in quanto possono aumentare i tempi di deployment per le tue funzioni.

Formato file

Se utilizzi un file .npmrc per impostare un token di autenticazione personalizzato, questo dovrebbe includere la riga mostrata di seguito.

//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN

Sostituisci:

  • REGISTRY_DOMAIN: il nome di dominio del tuo dominio privato npm. Imposta questo campo se il repository è ospitato con npmjs.org a registry.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}, che npm sostituisce con il valore effettivo del token indicato in completamente gestito di Google Cloud.

    Puoi impostare la variabile di ambiente $NPM_TOKEN con --set-build-env-vars all'argomento Comando gcloud functions deploy. Consulta il tutorial sulla gestione dei partner di rete sui moduli privati per maggiori dettagli sul token di autenticazione NPM.

Crea la tua funzione con dipendenze del fornitore

Le dipendenze del fornitore sono quelle la cui origine è inclusa direttamente nel tuo pacchetto di codice sorgente, e ricreati insieme al tuo codice. Puoi creare dipendenze Node.js fornite dal fornitore e saltare l'installazione durante il deployment Variabile di ambiente di build GOOGLE_VENDOR_NPM_DEPENDENCIES.

Prerequisiti per le dipendenze del fornitore

  1. Assicurati di avere una funzione funzionante con tutte le dipendenze da fornire al fornitore nel file package.json.

  2. Installa queste dipendenze in locale eseguendo:

        npm install
    
  3. Rimuovi node_modules dal file .gcloudignore nella directory di lavoro.

  4. Esegui il deployment della funzione, assicurandoti che la tua versione locale di Node.js sia la stessa di specificato durante il deployment.

  5. Esegui il deployment della funzione e delle dipendenze del fornitore con 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 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 uguale Versione Node.js utilizzata nello sviluppo locale ambiente

Il pacchetto del framework Functions è una dipendenza obbligatoria per le funzioni. Per velocizzare le build, consigliamo il fornitore di questo pacchetto. In caso contrario, scaricati e installati quando viene creata la funzione.

Se specifichi un motore npm nel file package.json, il parametro specificato di npm viene scaricata al momento della build. Per eliminare questo comportamento, rimuovi dal file package.json.