Runtime di Node.js

La funzione Cloud Functions viene eseguita in un ambiente costituito da un sistema operativo la versione del sistema più i pacchetti aggiuntivi, il supporto dei linguaggi e le funzioni Libreria di framework che supporta e richiama la tua funzione. Questo ambiente è è identificato dalla versione in linguaggio ed è noto come runtime.

Per informazioni sui runtime in generale e per sapere quale versione di Ubuntu utilizzato da ciascun runtime Node.js, consulta l'ambiente di esecuzione di Cloud Functions.

Per iniziare a creare ed eseguire il deployment di Cloud Functions con Node.js, consulta Guida rapida.

Per creare e testare le funzioni sul tuo sistema locale, consulta Esegui Functions con il framework di Functions.

Seleziona il runtime

Cloud Functions supporta diverse versioni di Node.js, elencate nella Pagina di supporto del runtime. Puoi selezionare il runtime Node.js preferito per la funzione durante il deployment:

Ambiente di esecuzione

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

Node.js 18 e le versioni successive utilizzano un ambiente di esecuzione basato su Ubuntu 22.04. Le versioni precedenti a Node.js 18 si basano su Ubuntu 18.04. Consulta Ambiente di esecuzione di Cloud Functions per ulteriori informazioni.

La libreria che richiama la tua funzione è Framework di funzioni Node.js.

Struttura del codice sorgente

Per consentire a Cloud Functions di trovare la definizione della tua funzione, ogni del runtime ha determinati requisiti di struttura per il codice sorgente. Consulta Scrittura di Cloud Functions per ulteriori informazioni.

Specifica delle dipendenze

Puoi specificare le dipendenze per le funzioni elencandole in un package.json. Per ulteriori informazioni, vedi Specifica delle dipendenze in Node.js.

Script di build Gestione dei partner di rete

Per impostazione predefinita, il runtime Node.js esegue npm run build se uno script build è stato rilevato in package.json. Se hai bisogno di un controllo aggiuntivo sulla build passaggi prima di avviare l'applicazione, puoi fornire un passaggio di build personalizzato aggiungendo uno script gcp-build al tuo 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 di build GOOGLE_NODE_RUN_SCRIPTS sulla stringa vuota per impedire l'esecuzione di tutti gli script.

Completamento delle funzioni asincrona

Quando si lavora con attività asincrone che prevedono callback o Promise devi comunicare esplicitamente al runtime che la funzione è terminata nell'esecuzione di queste attività. Puoi farlo in diversi modi, come mostrato in i seguenti esempi. La chiave è che il codice deve attendere attività asincrona o Promise da completare prima di tornare; altrimenti il componente asincrono della funzione può essere terminato prima del suo completamento.

Funzioni basate su eventi

Reso 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 HTTP Node.js forniscono request e response oggetti compatibili con ExpressJS per semplificare il consumo delle richieste HTTP. Cloud Functions legge automaticamente del corpo della richiesta, quindi riceverai sempre il corpo di una richiesta indipendentemente il tipo di media. Ciò significa che le richieste HTTP devono essere considerate completamente letto prima dell'esecuzione del codice. Nidificare ExpressJS le app devono essere usate tenendo presente questa avvertenza, in particolare il middleware che prevede il corpo di una richiesta da leggere potrebbe non comportarsi come previsto.

Utilizzo dei moduli ES

I moduli ECMAScript (moduli ES o ESM) sono uno standard TC39, una funzionalità non contrassegnata in Node versione 14 e successive per caricare i moduli JavaScript. A differenza di CommonJS, ESM fornisce un'API asincrona per caricare i moduli. Offre inoltre un popolare miglioramento della sintassi con le istruzioni import e export che possono essere utilizzate una Cloud Function (anziché le istruzioni require).

Per utilizzare ESM all'interno di una Cloud Function, devi dichiarare "type": "module" entro il tuo package.json.

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

Puoi utilizzare gli estratti conto import e export.