Runtime di Node.js

Cloud Functions supporta i seguenti runtime Node.js:

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

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

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

Selezione del runtime

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

gcloud

Se utilizzi l'interfaccia a riga di comando di Google Cloud, puoi specificare il runtime utilizzando il parametro --runtime. Ad esempio:

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

Per altri argomenti che puoi specificare al momento del deployment, vedi Eseguire il deployment utilizzando lo strumento gcloud.

Console

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

Ambiente di esecuzione

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

I runtime Node.js utilizzano un ambiente di esecuzione basato su Ubuntu 18.04. Per ulteriori informazioni, consulta l'articolo sull'ambiente di esecuzione di Cloud Functions.

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

Struttura del codice sorgente

Affinché Cloud Functions possa trovare la definizione della tua funzione, ogni runtime ha determinati requisiti di strutturazione per il codice sorgente. Per ulteriori informazioni, consulta la sezione Scrivere Cloud Functions.

Specifica delle dipendenze

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

Variabili di ambiente

I runtime Node.js 10 e versioni successive impostano automaticamente meno variabili di ambiente rispetto ai runtime precedenti supportati da Cloud Functions. Inoltre, per le funzioni Node.js 12 e versioni successive con limiti di memoria superiori a 2 GiB, gli utenti devono configurare NODE_OPTIONS in modo che abbiano max_old_space_size. Per i dettagli, consulta la sezione Utilizzare le variabili di ambiente.

Chiusura della funzione di segnalazione

Quando lavori con attività asincrone che coinvolgono callback o oggetti Promise, devi informare esplicitamente il runtime che la funzione ha completato l'esecuzione di queste attività. Puoi farlo in diversi modi, come mostrato negli esempi riportati di seguito.

Funzioni in background

Node.js

// Await-ing promises within functions is OK if you don't return anything
await Promise.resolve();

// These will cause background tasks to stop executing immediately
return 1; // OK: returning a value
return await Promise.resolve(); // WRONG: returning the result of a promise
return await Promise.reject(); // WRONG: same behavior as resolved promises

// These will wait until the related background task finishes
return Promise.resolve(); // OK: returning the promise itself
return Promise.reject(); // OK: same behavior as to-be-resolved promises

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 HTTP di Node.js forniscono oggetti request e response compatibili con ExpressJS per semplificare il consumo di richieste HTTP. Cloud Functions legge automaticamente il corpo della richiesta, quindi riceverai sempre il corpo di una richiesta indipendentemente dal tipo di contenuti. Ciò significa che le richieste HTTP devono essere considerate complete prima dell'esecuzione del codice. È necessario utilizzare la nidificazione delle app ExpressJS con questo avviso; in particolare, il middleware che prevede che il corpo di una richiesta venga letto potrebbe non comportarsi come previsto.

Utilizzo di moduli ES

I moduli ECMAScript (ES Modules o ESM) sono una funzionalità standard TC39 senza flag in Node versione 14 e successive per il caricamento di moduli JavaScript. A differenza di CommonJS, ESM fornisce un'API asincrona per il caricamento dei moduli. Fornisce inoltre un miglioramento comune della sintassi tramite le istruzioni import e export che possono essere utilizzate in una funzione Cloud Functions (anziché nelle istruzioni require).

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

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

Successivamente, puoi utilizzare le istruzioni import e export.