Node.js -Laufzeit

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

Funktionsvorbereitung

Sie können eine Funktion direkt über die Google Cloud Console vorbereiten oder auf Ihren lokalen Computer schreiben und hochladen. Informationen zum Vorbereiten Ihres lokalen Computers für die Node.js-Entwicklung finden Sie unter Node.js-Entwicklungsumgebung einrichten.

Unterstützte Node.js-Laufzeiten und Basis-Images

Laufzeit Laufzeit-ID Stacks Laufzeit-Basis-Image
Node.js 22 nodejs22
  • google-22 (default)
  • google-22-full
  • google-22/nodejs22
  • google-22-full/nodejs22
  • Node.js 20 nodejs20
  • google-22 (default)
  • google-22-full
  • google-22/nodejs20
  • google-22-full/nodejs20
  • Node.js 18 nodejs18
  • google-22 (default)
  • google-22-full
  • google-22/nodejs18
  • google-22-full/nodejs18
  • Node.js 16 nodejs16 google-18-full google-18-full/nodejs16
    Node.js 14 nodejs14 google-18-full google-18-full/nodejs14
    Node.js 12 nodejs12 google-18-full google-18-full/nodejs12
    Node.js 10 nodejs10 google-18-full google-18-full/nodejs10
    Node.js 8 nodejs8 Außer Betrieb genommen Außer Betrieb genommen
    Node.js 6 nodejs6 Außer Betrieb genommen Außer Betrieb genommen

    Laufzeit auswählen

    Sie können während der Bereitstellung eine der unterstützten Node.js-Laufzeiten für Ihre Funktion auswählen.

    Sie können eine Laufzeitversion über die Google Cloud Console oder die gcloud CLI auswählen. Klicken Sie auf den Tab, um eine Anleitung zum Verwenden des gewünschten Tools zu erhalten.

    gcloud

    Geben Sie das Node.js-Basis-Image für Ihre Funktion mit dem Flag --base-image an, während Sie die Funktion bereitstellen. Beispiel:

    gcloud run deploy FUNCTION \
        --source . \
        --function FUNCTION_ENTRYPOINT \
        --base-image nodejs22
    

    Ersetzen Sie:

    • FUNCTION durch den Namen der Funktion, die Sie bereitstellen. Sie können diesen Parameter auch weglassen, werden dann jedoch nach dem Namen gefragt.

    • FUNCTION_ENTRYPOINT durch den Einstiegspunkt zur Funktion in Ihrem Quellcode. Dies ist der Code, der von Cloud Run ausgeführt wird, wenn Ihre Funktion ausgeführt wird. Der Wert dieses Flags muss ein Funktionsname oder ein voll qualifizierter Klassenname sein, der in Ihrem Quellcode vorhanden ist.

    Eine ausführliche Anleitung zum Bereitstellen einer Funktion mit der gcloud CLI finden Sie unter Funktionen in Cloud Run bereitstellen.

    Console

    Sie können eine Laufzeitversion auswählen, wenn Sie in der Google Cloud Console eine Cloud Run-Funktion erstellen oder aktualisieren. Eine ausführliche Anleitung zum Bereitstellen einer Funktion finden Sie unter Funktionen in Cloud Run bereitstellen.

    So wählen Sie beim Erstellen einer Funktion eine Laufzeit in der Google Cloud Console aus:

    1. Wechseln Sie in der Google Cloud Console zur Seite Cloud Run.

      Zu Cloud Run

    2. Klicken Sie auf Funktion schreiben.

    3. Wählen Sie in der Liste Laufzeit eine Node.js-Laufzeitversion aus.

    4. Klicken Sie auf Erstellen und warten Sie, bis der Dienst in Cloud Run mit einer Platzhalter-Überarbeitung erstellt wurde.

    5. Die Console leitet Sie zum Tab Quelle weiter, auf dem Sie den Quellcode Ihrer Funktion sehen. Klicken Sie auf Speichern und neu bereitstellen.

    Eine ausführliche Anleitung zum Aktualisieren der Laufzeitversion nach der Bereitstellung Ihrer Funktion finden Sie unter Neuen Quellcode noch einmal bereitstellen.

    Struktur des Quellcodes

    Damit Cloud Run Functions die Definition Ihrer Funktion findet, muss Ihr Quellcode einer bestimmten Struktur entsprechen. 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

    // 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 Node.js-HTTP-Funktionen 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.

    Wenn Sie ESM in einer Cloud Run-Funktion verwenden möchten, müssen Sie "type": "module" in Ihrem package.json deklarieren.

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

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

    Weitere Informationen zur Verwendung von ES-Modulen