Runtime di Node.js

Cloud Functions supporta i seguenti runtime Node.js:

  • Node.js 20
  • Node.js 18 (consigliato)
  • Node.js 16
  • Node.js 14
  • Node.js 12
  • Node.js 10

Per istruzioni su come eseguire la funzione Node.js in locale, consulta Esecuzione di funzioni con framework delle funzioni.

Per iniziare a utilizzare Node.js su Cloud Functions, consulta la guida rapida.

Selezione del runtime

Puoi selezionare il runtime Node.js per la tua funzione durante il deployment.

gcloud

Se utilizzi Google Cloud CLI, puoi specificare il runtime utilizzando il parametro --runtime. Ecco alcuni esempi:

gcloud functions deploy NAME --runtime nodejs20 --trigger-http

Per altri argomenti che puoi specificare durante il deployment, vedi Deployment utilizzando lo strumento gcloud.

Console

Se utilizzi la console Google Cloud, puoi selezionare il runtime quando crei e sottoponi a deployment una funzione. Per istruzioni dettagliate, consulta la guida rapida alla console Google Cloud.

Ambiente di esecuzione

L'ambiente di esecuzione include il runtime, il sistema operativo, i pacchetti e una libreria che richiama la tua funzione.

Il runtime Node.js versione 18 utilizza un ambiente di esecuzione basato su Ubuntu 22.04. I runtime Node.js precedenti alla 18 si basano su Ubuntu 18.04. Per ulteriori informazioni, consulta Ambiente di esecuzione di Cloud Functions.

La libreria che richiama la tua funzione è il framework delle funzioni dei nodi.

Struttura del codice sorgente

Per fare in modo che Cloud Functions trovi la definizione della tua funzione, ogni runtime deve avere determinati requisiti di strutturazione per il codice sorgente. Per ulteriori informazioni, consulta Scrittura di Cloud Functions.

Specifica delle dipendenze

Puoi specificare le dipendenze per le funzioni elencandole in un file package.json. Per ulteriori informazioni, consulta Specificare le dipendenze in Node.js.

Script di creazione NPM

Per impostazione predefinita, il runtime Node.js esegue npm run build se viene rilevato uno script build in package.json. Se hai bisogno di un controllo aggiuntivo sui passaggi di build prima di avviare l'applicazione, puoi fornire un passaggio di build personalizzato aggiungendo uno script gcp-build al file package.json.

Per impedire alla build di eseguire lo script npm run build:

  • Aggiunta di uno script gcp-build con un valore vuoto nel file package.json: "gcp-build":"".

  • Impostazione della variabile di ambiente della build GOOGLE_NODE_RUN_SCRIPTS sulla stringa vuota per evitare l'esecuzione di tutti gli script.

Terminazione della funzione di segnalazione

Quando lavori con attività asincrone che prevedono callback o oggetti Promise, devi esplicitamente informare il runtime che la tua funzione ha completato l'esecuzione di queste attività. Puoi farlo in diversi modi, come mostrato negli esempi di seguito. La chiave è che il tuo codice deve attendere il completamento dell'attività asincrona o Promise prima di tornare, altrimenti il componente asincrono della tua funzione potrebbe essere terminato prima del suo completamento.

Funzioni basate su eventi

Ritorno implicito

  exports.implicitlyReturning = async (event, context) => {
    return await asyncFunctionThatReturnsAPromise();
  };

Ritorno esplicito

  exports.explicitlyReturning = function (event, context) {
    return asyncFunctionThatReturnsAPromise();
  };

Funzioni HTTP

Node.js

// OK: await-ing a Promise before sending an HTTP response
await Promise.resolve();

// WRONG: HTTP functions should send an
// HTTP response instead of returning.
return Promise.resolve();

// HTTP functions should signal termination by returning an HTTP response.
// This should not be done until all background tasks are complete.
res.send(200);
res.end();

// WRONG: this may not execute since an
// HTTP response has already been sent.
return Promise.resolve();

Utilizzo del middleware per gestire le richieste HTTP

Le funzioni Cloud Functions Node.js HTTP forniscono oggetti request e response compatibili con ExpressJS per semplificare il consumo delle richieste HTTP. Cloud Functions legge automaticamente il corpo della richiesta, quindi riceverai sempre il corpo di una richiesta indipendentemente dal tipo di contenuto. Ciò significa che, quando il codice viene eseguito, le richieste HTTP devono essere state lette per intero. La nidificazione delle app ExpressJS dovrebbe essere utilizzata con questo avvertimento, in particolare il middleware che prevede che il corpo di una richiesta da leggere potrebbe non funzionare come previsto.

Utilizzo dei moduli ES

I moduli ECMAScript (moduli ES o ESM) sono una funzionalità standard, non contrassegnata, TC39 nella versione 14 o superiore del nodo per il caricamento dei moduli JavaScript. A differenza di CommonJS, ESM fornisce un'API asincrona per il caricamento dei moduli. Fornisce anche un migliore miglioramento della sintassi tramite le istruzioni import e export che possono essere utilizzate in una Cloud Function (invece che nelle istruzioni require).

Per utilizzare ESM in una Cloud Function, devi dichiarare "type": "module" all'interno del package.json.

{
  ...
  "type": "module",
  ...
}

Quindi puoi utilizzare le istruzioni import e export.