Eine Funktion kann externe Node.js-Module sowie lokale Daten verwenden. Abhängigkeiten in Node.js werden mit npm verwaltet und in einer Metadatendatei namens package.json
ausgedrückt. Cloud Functions-Node.js-Laufzeiten unterstützen die Installation mit npm, yarn oder pnpm.
Zum Angeben einer Abhängigkeit für die Funktion fügen Sie diese der Datei package.json
hinzu.
In diesem Beispiel ist eine Abhängigkeit in der Datei package.json
enthalten:
{ "dependencies": { "escape-html": "^1.0.3" } }
Die Abhängigkeit wird dann in die Funktion importiert:
const escapeHtml = require('escape-html');
// Return a greeting with the input HTML-escaped.
exports.hello = functions.https.onRequest((req, res) => {
res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
});
import * as escapeHtml from 'escape-html';
// Return a greeting with the input HTML-escaped.
export let hello = functions.https.onRequest((req, res) => {
res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
}
Lokale Node.js-Module einschließen
Sie können auch lokale Node.js-Module in Ihre Funktion einbinden. Deklarieren Sie dazu Ihr Modul in package.json
mit dem Präfix file:
. Im folgenden Beispiel steht mymodule
für den Modulnamen und mymoduledir
für das Verzeichnis, in dem das Modul enthalten ist:
{ "dependencies": { "mymodule": "file:mymoduledir" } }
Der Code für dieses lokale Modul sollte nicht im Ordner node_modules
im Stammverzeichnis der Funktion gespeichert werden.
Zusätzliche Schritte für TypeScript
TypeScript ist am hilfreichsten, wenn Sie Bibliotheken mit Typinformationen verwenden.
So kann TypeScript Syntaxfehler erkennen und Editoren können Ihnen bessere Vorschläge für die automatische Vervollständigung machen. Einige Bibliotheken wie firebase-admin
und firebase-functions
enthalten TypeScript-Definitionen.
Viele Bibliotheken bieten keine eigene TypeScript-Definition an. Das Projekt DefinitelyTyped bietet von der Community gepflegte Definitionen für die beliebtesten Node-Bibliotheken.
DefinitelyTyped veröffentlicht diese Definitionen unter demselben NPM-Paketnamen, aber innerhalb der Organisation „@types“. So können Sie beispielsweise die Typinformationen für die uuid
-Bibliothek installieren:
npm install @types/uuid
Wenn Sie sich mit TypeScript vertraut machen, werden Sie möglicherweise beide Installationen kombinieren:
npm install uuid @types/uuid
Die Typabhängigkeiten sollten derselben Art wie die Bibliotheksabhängigkeit sein. Sie sollten beispielsweise uuid
nicht als normale Abhängigkeit und @types/uuid
als Entwicklungsabhängigkeit oder Peer-Abhängigkeit speichern.
Node.js-Module laden
Verwenden Sie die Node.js-Funktion require()
, um ein installiertes Node.js-Modul zu laden. Sie können auch die Funktion require()
verwenden, um lokale Dateien zu importieren, die Sie gemeinsam mit der Funktion bereitstellen möchten.
import
auf dieselbe Weise, um ein installiertes Node.js-Modul zu laden.
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 Google Cloud Functions-Funktion bereitstellen, generiert der Build-Prozess automatisch Artifact Registry-Anmeldedaten für das Cloud Build-Dienstkonto.
Sie müssen nur das Artifact Registry-Repository in .npmrc
auflisten, ohne zusätzliche Anmeldedaten zu generieren. Beispiel:
@SCOPE :registry=https://REGION_ID -npm.pkg.dev/PROJECT_ID /REPOSITORY_NAME
//REGION_ID -npm.pkg.dev/PROJECT_ID /REPOSITORY_NAME :always-auth=true
Dieser Ansatz kann auch für den Yarn v1-Paketmanager verwendet werden.
Wenn Sie Yarn v2 oder höher verwenden, müssen Sie nur das Artifact Registry-Repository in .yarnrc.yml
ohne zusätzliche Anmeldedaten auflisten.
Beispiele:
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 Ihr Repository bei
npmjs.org
gehostet wird, legen Sie dieses Feld aufregistry.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, dernpm
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 Befehlgcloud functions deploy
festlegen. Weitere Informationen zum NPM-Authentifizierungstoken finden Sie in der NPM-Anleitung zu privaten Modulen.
Funktion mit Anbieterabhängigkeiten erstellen
Anbieterbasierte Abhängigkeiten sind Abhängigkeiten, die direkt in Ihrem Quellcodepaket enthalten und zusammen mit Ihrem eigenen Code neu erstellt werden. Mit der Build-Umgebungsvariable GOOGLE_VENDOR_NPM_DEPENDENCIES erstellen Sie anbietergebundene Node.js-Abhängigkeiten und überspringen die Installation während der Bereitstellung.
Voraussetzungen für übernommene Abhängigkeiten
Achten Sie darauf, dass Sie eine funktionierende Funktion haben, die alle Abhängigkeiten enthält, die der Anbieter in der Datei
package.json
definiert hat.Installieren Sie diese Abhängigkeiten lokal, indem Sie Folgendes ausführen:
npm install
Entfernen Sie
node_modules
aus der .gcloudignore-Datei in Ihrem Arbeitsverzeichnis.Stellen Sie die Funktion bereit und achten Sie darauf, dass Ihre lokale Node.js-Version mit der Version übereinstimmt, die Sie während der Bereitstellung angeben.
Stellen Sie die Funktion und die Anbieterabhängigkeiten mit dem folgenden Befehl bereit:
gcloud functions deploy
FUNCTION_NAME \ --runtimeRUNTIME_NAME \ --set-build-env-vars GOOGLE_VENDOR_NPM_DEPENDENCIES=trueErsetzen Sie:
- FUNCTION_NAME: der Name der Cloud Functions-Funktion, die Sie bereitstellen
- RUNTIME_NAME ist der Name der Node.js-Laufzeit, in der die bereitgestellte Funktion ausgeführt werden soll. Dies muss dieselbe Node.js-Version sein, die Sie in Ihrer lokalen Entwicklungsumgebung verwendet haben.
Das Functions Framework-Paket ist eine erforderliche Abhängigkeit für Funktionen. Für schnellere Builds empfehlen wir die Verwendung dieses Pakets. Ist dies nicht der Fall, wird sie heruntergeladen und installiert, wenn die Funktion erstellt wird.
Wenn Sie in der Datei package.json eine npm-Engine angeben, wird die angegebene Version von npm zur Build-Zeit heruntergeladen. Entfernen Sie das Verhalten aus der package.json-Datei, um dieses Verhalten zu unterdrücken.