Node.js-Anwendung erstellen

Versionen von Node.js angeben

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

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 wird, 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 Run-Funktionen 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 stattdessen benutzerdefinierte Build-Schritte angeben, um das Standardverhalten zu überschreiben und nur die gewünschten Scripts während des Builds auszuführen. Sie können die Buildschritte entweder über die 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 Werte überschreibt, die für gcp-build in Ihrer package.json angegeben sind.

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

GOOGLE_NODE_RUN_SCRIPTS verwenden

Sie können die Umgebungsvariable GOOGLE_NODE_RUN_SCRIPTS an den Build übergeben, um zu steuern, welche Scripts 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 Ihrer package.json-Datei wird nur npm run gcp-build ausgeführt, d. h., das Standardverhalten wird überschrieben. 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, wird npm start vom Buildpack ausgeführt.

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, festgelegt für npm install.

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

GOOGLE_NODE_RUN_SCRIPTS

Hier wird eine sortierte Liste von npm-Scripts aus package.json angegeben, die nach der Installation von Abhängigkeiten ausgeführt werden sollen. Die Liste muss durch Kommas getrennt sein und die Scripts werden in der Reihenfolge ausgeführt, in der sie aufgeführt sind.

Wenn Sie GOOGLE_NODE_RUN_SCRIPTS angeben, werden nur die von Ihnen aufgelisteten Scripts ausgeführt. Wenn Sie beispielsweise verhindern möchten, dass das 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.