Node.js-Laufzeit

Die Cloud Run-Funktion wird in einer Umgebung ausgeführt, die aus einer Betriebssystemversion, Add-on-Paketen, Sprachunterstützung und der Functions Framework-Bibliothek besteht, die Ihre Funktion unterstützt und aufruft. Diese Umgebung wird durch die Sprachversion identifiziert und als Laufzeit bezeichnet.

Informationen zu Laufzeiten im Allgemeinen und dazu, welche Ubuntu-Version jede Node.js-Laufzeit verwendet, finden Sie in der Ausführungsumgebung von Cloud Run-Funktionen.

Informationen zum Erstellen und Bereitstellen von Cloud Run-Funktionen mit Node.js finden Sie in der Kurzanleitung.

Informationen zum Erstellen und Testen von Funktionen auf Ihrem lokalen System finden Sie unter Funktionen mit Functions Framework ausführen.

Laufzeit auswählen

Cloud Run-Funktionen unterstützen mehrere Versionen von Node.js, die auf der Seite Laufzeitsupport aufgeführt sind. Sie können die bevorzugte Node.js-Laufzeit für Ihre Funktion während der Bereitstellung auswählen.

Ausführungsumgebung

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

Node.js 18 und neuere Versionen verwenden eine Ausführungsumgebung auf der Basis von Ubuntu 22.04. Versionen vor Node.js 18 basieren auf Ubuntu 18.04. Weitere Informationen finden Sie unter Ausführungsumgebung von Cloud Run-Funktionen.

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

Struktur des Quellcodes

Damit Cloud Run-Funktionen die Definition Ihrer Funktion findet, hat jede Laufzeit bestimmte Strukturanforderungen für Ihren Quellcode. Weitere Informationen finden Sie unter Cloud Run-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.

NPM-Build-Skript

Standardmäßig führt die Node.js-Laufzeit npm run build aus, wenn in package.json ein build-Skript erkannt wird. Wenn Sie vor dem Starten Ihrer Anwendung zusätzliche Kontrolle über die Build-Schritte benötigen, können Sie einen benutzerdefinierten Build-Schritt hinzufügen. Fügen Sie dazu der Datei package.json ein gcp-build-Skript hinzu.

Sie können verhindern, dass Ihr Build das Skript npm run build ausführt, indem Sie eines der folgendes Dinge tun:

  • Fügen Sie ein gcp-build-Script mit einem leeren Wert in Ihre package.json-Datei ein: "gcp-build":"".

  • Setzen Sie die Build-Umgebungsvariable GOOGLE_NODE_RUN_SCRIPTS auf den leeren String, um zu verhindern, dass alle Skripts ausgeführt werden.

Asynchrone Vervollständigung von Funktionen

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. Der Punkt ist, dass Ihr Code auf den Abschluss der asynchronen Aufgabe oder von Promise warten muss, bevor er zurückkehren kann. Andernfalls wird die asynchrone Komponente Ihrer Funktion möglicherweise beendet, bevor sie abgeschlossen ist.

Ereignisgesteuerte Funktionen

Implizite Rückgabe

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

Explizite Rückgabe

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

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 Run-HTTP-Funktionen in Node.js request- und response-Objekte bereit, die mit ExpressJS kompatibel sind. Cloud Run-Funktionen lesen den Anfragetext automatisch, sodass Sie diesen immer unabhängig vom Medientyp 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

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 Run-Funktion anstelle von require-Anweisungen verwendet werden können.

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

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

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