Node.js-Anwendung erstellen

Versionen von Node.js angeben

Das Buildpacks-Projekt unterstützt die aktuellen und Active LTS-Releases von Node.js. Ältere Versionen von Node.js sind verfügbar, werden jedoch möglicherweise nicht aktiv vom Projekt verwaltet.

package.json verwenden

Um die Node.js-Version Ihrer Anwendung während der Bereitstellung anzugeben konfigurieren Sie das engines.node-Feld in package.json. Um das Buildpack so zu konfigurieren, dass es beim Bereitstellen Ihrer Anwendung die neueste Version von Node.js v16 verwendet, können Sie folgende Werte in Ihrem package.json verwenden:

"engines": {
  "node": "16.x.x"
}

GOOGLE_NODEJS_VERSION verwenden

Es ist auch möglich, die Node.js-Version über die GOOGLE_NODEJS_VERSION-Umgebungsvariable anzugeben. Wenn beide Konfigurationen festgelegt sind, hat der GOOGLE_NODEJS_VERSION-Wert Vorrang vor dem engines.node-Attribut. Wenn kein Wert angegeben ist, wird die neueste LTS-Version von Node.js verwendet.

So konfigurieren Sie den Buildpack zur Verwendung von Node.js 16 bei der Bereitstellen Ihrer Anwendung:

pack build --builder=gcr.io/buildpacks/builder \
   sample-functions-framework-node \
   --env GOOGLE_NODEJS_VERSION=16.x.x

Sie können auch den project.toml-Projektdeskriptor verwenden, um die Umgebungsvariable zusammen mit den Projektdateien zu codieren. Weitere Informationen finden Sie unter Anwendung mit Umgebungsvariablen erstellen.

Tipps

  • engines.node kann eine semver-Einschränkung nutzen. Die spezifische Bibliothek, die wir für Node.js-Buildpacks verwenden, ist Masterminds/semver.
  • Vermeiden Sie die Verwendung von "größer als (>)"-Spezifizierern in engines.node
  • Wenn Sie die Anwendung in der App Engine-Standardumgebung bereitstellen, sollte das engines.node-Attribut mit der in app.yaml angegebenen Laufzeit kompatibel sein.
  • Weitere Informationen zur engines.node-Konfigurationsoption in package.json finden Sie in der offiziellen NPM-Dokumentation unter dem Thema "Engines".
  • Wenn Sie eine Funktion in Cloud Functions bereitstellen, sollte das engines.node-Attribut mit der Laufzeit kompatibel sein, die zur Bereitstellung der Funktion verwendet wird.

Abhängigkeiten installieren

Mithilfe von npm:

  • NPM ist der Standard-Paketmanager.
  • Verwenden Sie nach Möglichkeit package-lock.json, um die Cache-Leistung zu verbessern.
  • Standardmäßig werden nur Produktionsabhängigkeiten installiert.
  • Sie können den npm-Versionsabschnitt mit dem engines.npm-Feld in Ihrer package.json-Datei angeben.

Mithilfe von Yarn:

  • Yarn wird stattdessen verwendet, wenn Sie die Datei yarn.lock in Ihr Projekt aufnehmen.
  • Sie können die zu verwendende Yarn-Version im Feld engines.yarn Ihrer package.json-Datei angeben.
  • Wir unterstützen den Yarn2-PnP-Modus, wenn Ihr Projekt ein .yarn/cache enthält

Mithilfe von Pnpm:

  • Pnpm wird stattdessen verwendet, wenn Sie die Datei pnpm-lock.yaml in Ihr Projekt aufnehmen.
  • Sie können eine Version von pnpm im Feld engines.pnpm Ihrer Datei package.json angeben.
  • Ein funktionierendes Beispiel finden Sie in der Anwendung sample-node-pnpm.

Private Module verwenden

Sie können ein privates npm-Modul verwenden. Geben Sie dazu Einstellungen für die Authentifizierung mit der Registry in einer .npmrc-Datei im Verzeichnis der Funktion an. Wenn Sie Yarn Version 2 oder höher als Paketmanager verwenden, heißt diese Datei .yarnrc.yml.

Private Module aus Artifact Registry

In einem Artifact Registry Node.js-Package Repository können private Module für Ihre Funktion gehostet werden. Wenn Sie eine Buildpacks-Funktion bereitstellen, generiert der Build-Prozess automatisch Artifact Registry-Anmeldedaten für das Cloud Build-Dienstkonto. Sie müssen das Artifact Registry-Repository nur in der Datei .npmrc auflisten, wenn Sie NPM oder Yarn Version 1 verwenden. Wenn Sie beispielsweise NPM oder Yarn Version 1 verwenden:

@SCOPE:registry=https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
//REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME:always-auth=true

Wenn Sie Yarn Version 2 oder höher verwenden, müssen Sie nur das Artifact Registry-Repository in Ihrer .yarnrc.yml-Datei ohne zusätzliche Anmeldedaten auflisten. Beispiel:

npmScopes:
  SCOPE:
    npmRegistryServer: https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
    npmAlwaysAuth: true

Private Module aus anderen Repositories

Die npm-Dokumentation erläutert, wie benutzerdefinierte, schreibgeschützte Zugriffstoken erstellt werden. Wir raten davon ab, die im Basisverzeichnis erstellte .npmrc-Datei zu verwenden, da sie ein Lese-/Schreibtoken enthält. Schreibberechtigungen sind während der Bereitstellung nicht erforderlich und können ein Sicherheitsrisiko darstellen.

Fügen Sie die .npmrc-Datei nicht hinzu, wenn Sie keine privaten Repositories verwenden, da sie die Bereitstellungszeit für Ihre Funktionen erhöhen kann.

Dateiformat

Wenn Sie eine .npmrc-Datei zum Festlegen eines benutzerdefinierten Auth-Tokens verwenden, sollte es die unten aufgeführte Zeile enthalten.

//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN

Ersetzen Sie:

  • REGISTRY_DOMAIN: der Domainname Ihrer privaten npm-Registry. Wenn der Repository-Host beispielsweise npmjs.org ist, legen Sie dieses Feld auf registry.npmjs.org fest.
  • AUTH_TOKEN: das Autorisierungstoken für Ihre npm-Registry. Dies kann entweder der Literaltextwert des Tokens oder der Textstring ${NPM_TOKEN} sein, den der Befehl npm durch den tatsächlichen Tokenwert aus der Umgebung ersetzt.

    Sie können die Umgebungsvariable $NPM_TOKEN mit dem Argument --set-build-env-vars auf den Befehl gcloud functions deploy festlegen. Weitere Informationen zum NPM-Authentifizierungstoken finden Sie in der NPM-Anleitung zu privaten Modulen.

Benutzerdefinierte Build-Schritte während der Bereitstellung ausführen

Standardmäßig wird npm run build ausgeführt, wenn in Ihrer package.json-Datei ein Script angegeben ist. Sie können jedoch benutzerdefinierte Build-Schritte angeben, um das Standardverhalten zu überschreiben und nur die Skripts auszuführen, die Sie während des Builds verwenden möchten. Sie können die Build-Schritte mithilfe der Umgebungsvariable GOOGLE_NODE_RUN_SCRIPTS oder gcp-build in der Datei package.json steuern.

Sie können nur eine Methode verwenden. Beachten Sie, dass die Umgebungsvariable GOOGLE_NODE_RUN_SCRIPTS Vorrang hat und alle für gcp-build in Ihrer package.json angegebenen Werte überschreibt.

Wenn Sie benutzerdefinierte Build-Schritte konfigurieren, werden standardmäßig sowohl dependencies als auch devDependencies in Ihrer package.json-Datei installiert, bevor Skripts oder Befehle ausgeführt werden. Sie können das Standardverhalten mit der Umgebungsvariable NODE_ENV überschreiben.

GOOGLE_NODE_RUN_SCRIPTS verwenden

Sie können die Umgebungsvariable GOOGLE_NODE_RUN_SCRIPTS an den Build übergeben, um zu steuern, welche Skripts ausgeführt werden. Sie können ein oder mehrere Skripts angeben oder stattdessen eine leere Umgebungsvariable übergeben, um die Ausführung des Standardverhaltens zu verhindern, z. B. GOOGLE_NODE_RUN_SCRIPTS=. Ausführliche Informationen finden Sie unter Umgebungsvariablen.

package.json verwenden

Durch Hinzufügen von gcp-build in der Datei package.json wird nur npm run gcp-build ausgeführt, was bedeutet, dass das Standardverhalten überschrieben wird. Sie können einen oder mehrere Befehle angeben oder einen leeren String angeben, um zu verhindern, dass ein Befehl ausgeführt wird, z. B. "gcp-build":"".

"scripts": {
  ...
  "gcp-build": "npm run lint && npm run build"
  ...
}

Anwendungseinstiegspunkt

Das Node.js-Buildpack führt den im scripts.start-Feld Ihres package.json angegebenen Befehls aus. Wenn scripts.start nicht festgelegt ist, führt das Buildpack npm start aus.

Wir empfehlen die Verwendung einer Procfile-Datei, da dann npm oder yarn aus dem Pfad entfernt werden.

Umgebungsvariablen

Sie können Umgebungsvariablen festlegen, um Builds Ihres Container-Images zu konfigurieren.

Das Node.js-Buildpack unterstützt folgende Umgebungsvariablen, um Ihren Container anzupassen

NPM_CONFIG_<key>

Dokumentation ansehen

Beispiel: NPM_CONFIG_FLAG=value übergibt -flag=value an npm-Befehle.

NODE_ENV

Gibt die Entwicklungsumgebung während des Builds an; für npm install festgelegt.

Beispiel: NODE_ENV=development installiert sowohl dependencies als auch devDependencies, die in package.json angegeben sind.

GOOGLE_NODE_RUN_SCRIPTS

Gibt eine geordnete Liste von npm-Skripts aus package.json an, die nach der Installation von Abhängigkeiten ausgeführt werden sollen. Die Liste muss durch Kommas getrennt sein und in der Reihenfolge ausgeführt werden, in der Sie die einzelnen Skripts auflisten.

Wenn Sie GOOGLE_NODE_RUN_SCRIPTS angeben, werden nur die Skripts ausgeführt, die Sie auflisten. Wenn Sie beispielsweise verhindern möchten, dass die Standard-npm run build ausgeführt wird, geben Sie die Umgebungsvariable ohne Wert an.

Beispiele:

  • GOOGLE_NODE_RUN_SCRIPTS=lint,build führt npm run lint und dann npm run build aus.
  • GOOGLE_NODE_RUN_SCRIPTS= führt keine Skripts aus.