Node.js-Laufzeit

Cloud Functions unterstützt die folgenden Node.js-Laufzeiten:

  • Node.js 16 (Vorschau)
  • Node.js 14 (empfohlen)
  • Node.js 12
  • Node.js 10

Eine Anleitung zum lokalen Ausführen Ihrer Node.js-Funktion finden Sie unter Funktionen mit Function Frameworks ausführen.

Eine Einführung zu Node.js in Cloud Functions finden Sie in der Schnellstartanleitung.

Laufzeit auswählen

Sie können die gewünschte Node.js-Laufzeit für Ihre Funktion während der Bereitstellung auswählen.

gcloud

Wenn Sie das gcloud-Befehlszeilentool verwenden, können Sie die Laufzeit mit dem Parameter --runtime angeben. Beispiel:

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

Weitere Argumente, die Sie bei der Bereitstellung angeben können, finden Sie unter gcloud-Tool zum Bereitstellen verwenden.

Console

Wenn Sie die Cloud Console verwenden, können Sie beim Erstellen und Bereitstellen einer Funktion die Laufzeit auswählen. Eine ausführliche Anleitung finden Sie in der Cloud Console-Kurzanleitung.

Ausführungsumgebung

Die Ausführungsumgebung enthält die Laufzeit, das Betriebssystem, Pakete und eine Bibliothek, die Ihre Funktion aufruft.

Die Node.js-Laufzeiten verwenden eine Ausführungsumgebung basierend auf Ubuntu 18.04. Weitere Informationen finden Sie unter Ausführungsumgebung von Cloud Functions.

Die Bibliothek, die die Funktion aufruft, ist Node Functions Framework.

Struktur des Quellcodes

Damit Cloud Functions die Definition Ihrer Funktion findet, hat jede Laufzeit bestimmte Strukturanforderungen für Ihren Quellcode. Weitere Informationen finden Sie unter Cloud Functions-Funktionen schreiben.

Abhängigkeiten angeben

Sie können für Funktionen Abhängigkeiten angeben. Dazu müssen Sie diese in der Datei package.json auflisten. Weitere Informationen finden Sie unter Abhängigkeiten in Node.js angeben.

Umgebungsvariablen

Die Node.js 10+-Laufzeiten legen automatisch weniger Umgebungsvariablen als die von Cloud Functions unterstützten vorherigen Laufzeiten fest. Für Node.js-12+-Funktionen mit Speicherlimits größer als 2 GiB müssen Nutzer NODE_OPTIONS für max_old_space_size konfigurieren. Weitere Informationen finden Sie unter Umgebungsvariablen verwenden.

Beendigung der Signalisierungsfunktion

Wenn Sie mit asynchronen Aufgaben arbeiten, die Rückrufe oder Promise-Objekte enthalten, müssen Sie der Laufzeit ausdrücklich mitteilen, dass die Funktion die Ausführung dieser Aufgaben abgeschlossen hat. Dies können Sie auf verschiedene Arten tun, wie in den folgenden Beispielen gezeigt.

Hintergrundfunktionen

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

HTTP-Funktionen

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()

Middleware zur Verarbeitung von HTTP-Anfragen verwenden

Zur einfacheren Verarbeitung von HTTP-Anfragen stellen Cloud Functions-HTTP-Funktionen in Node.js request- und response-Objekte bereit, die mit ExpressJS kompatibel sind. Cloud Functions liest den Anfragetext automatisch, sodass Sie diesen immer unabhängig vom Inhaltstyp erhalten. Das bedeutet, dass HTTP-Anfragen zum Zeitpunkt der Codeausführung als vollständig gelesen angesehen werden sollten. Dies sollte beim Verschachteln von ExpressJS-Anwendungen beachtet werden. Insbesondere Middleware, die erwartet, dass der Anfragetext ungelesen ist, verhält sich eventuell nicht wie gewohnt.

ES-Module verwenden (experimentell)

ECMAScript-Module (ES-Module oder ESM) sind ein standardmäßiges TC39-Feature in Node Version 14+ zum Laden von JavaScript-Modulen. Im Gegensatz zu CommonJS bietet ESM eine asynchrone API zum Laden von Modulen. Es bietet auch eine beliebte Syntaxverbesserung über import- und export-Anweisungen, die in einer Cloud Functions-Funktion anstelle von require-Anweisungen verwendet werden können.

Zur Verwendung von ESM in einer Cloud Functions-Funktion müssen Sie "type": "module" in Ihrem package.json deklarieren.

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

Dann können Sie die Anweisungen import und export verwenden.