Eine Funktion darf sowohl externe Node.js-Module als auch lokale Daten verwenden. Abhängigkeiten in Node.js werden mit npm verwaltet und in einer Metadatendatei namens package.json
ausgedrückt. Die Cloud Functions Node.js-Laufzeiten unterstützen die Installation mit npm , Yarn oder pnpm .
Um eine Abhängigkeit für Ihre Funktion anzugeben, fügen Sie sie Ihrer package.json
-Datei hinzu.
In diesem Beispiel ist eine Abhängigkeit in der Datei package.json
aufgeführt:
{ "dependencies": { "escape-html": "^1.0.3" } }
Die Abhängigkeit wird dann in die Funktion importiert:
JavaScript
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')}!`);
});
Typoskript
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')}!`);
}
Einschließlich lokaler Node.js-Module
Sie können auch lokale Node.js-Module als Teil Ihrer Funktion einbinden. Sie können dies erreichen, indem Sie Ihr Modul in package.json
mit dem file:
deklarieren. Im folgenden Beispiel bezieht sich mymodule
auf Ihren Modulnamen und mymoduledir
ist das Verzeichnis, das Ihr Modul enthält:
{ "dependencies": { "mymodule": "file:mymoduledir" } }
Der Code für dieses lokale Modul sollte an einem anderen Ort als dem Ordner node_modules
im Stammverzeichnis Ihrer Funktion gespeichert werden.
Zusätzliche Schritte für TypeScript
TypeScript hilft Ihnen am meisten, wenn Sie Bibliotheken verwenden, die über Typinformationen verfügen. Dadurch kann TypeScript Syntaxfehler erkennen und Redakteure können Ihnen bessere Vorschläge zur automatischen Vervollständigung machen. Einige Bibliotheken wie firebase-admin
und firebase-functions
werden mit TypeScript-Definitionen ausgeliefert.
Viele Bibliotheken stellen keine eigene TypeScript-Definition bereit. Das DefinitelyTyped- Projekt stellt von der Community verwaltete Definitionen für die beliebtesten Knotenbibliotheken bereit. DefinitelyTyped veröffentlicht diese Definitionen unter demselben NPM-Paketnamen, jedoch innerhalb der Organisation „@types“. Sie können die Typinformationen für die uuid
Bibliothek beispielsweise wie folgt installieren:
npm install @types/uuid
Wenn Sie mit TypeScript vertrauter werden, werden Sie möglicherweise feststellen, dass Sie beide Installationen kombinieren:
npm install uuid @types/uuid
Typabhängigkeiten sollten von derselben Art sein wie die Bibliotheksabhängigkeit. Beispielsweise sollten Sie uuid
nicht als normale Abhängigkeit und @types/uuid
als Dev-Abhängigkeit oder Peer-Abhängigkeit speichern.
Laden von Node.js-Modulen
Verwenden Sie die Node.js-Funktion require()
um jedes von Ihnen installierte Node.js-Modul zu laden. Sie können die Funktion require()
auch verwenden, um lokale Dateien zu importieren, die Sie neben Ihrer Funktion bereitstellen.
import
auf die gleiche Weise, um jedes installierte Node.js-Modul zu laden.Verwendung privater Module
Sie können ein privates npm-Modul verwenden, indem Sie Einstellungen für die Authentifizierung bei der Registrierung in einer .npmrc
Datei im Verzeichnis der Funktion bereitstellen. Wenn Sie Yarn v2 oder höher als Paketmanager verwenden, heißt diese Datei .yarnrc.yml
.
Private Module von Artifact Registry
Ein Artifact Registry Node.js-Paket-Repository kann private Module für Ihre Funktion hosten. Wenn Sie eine Google Cloud Functions-Funktion bereitstellen, generiert der Build-Prozess automatisch Artifact Registry-Anmeldeinformationen für das Cloud Build-Dienstkonto . Sie müssen lediglich das Artifact Registry-Repository in Ihrer .npmrc
auflisten, ohne zusätzliche Anmeldeinformationen zu generieren. Zum 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 funktioniert auch für den Paketmanager Yarn v1. Wenn Sie Yarn v2 oder höher verwenden, müssen Sie nur das Artifact Registry-Repository in Ihrer .yarnrc.yml
ohne zusätzliche Anmeldeinformationen auflisten. Zum Beispiel:
npmScopes:
SCOPE:
npmRegistryServer: https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
npmAlwaysAuth: true
Private Module aus anderen Repositorys
In der npm-Dokumentation wird erläutert, wie benutzerdefinierte schreibgeschützte Zugriffstoken erstellt werden. Wir raten davon ab, die im Home-Verzeichnis erstellte .npmrc
Datei zu verwenden, da sie ein Lese-/Schreibtoken enthält. Schreibberechtigungen sind während der Bereitstellung nicht erforderlich und könnten ein Sicherheitsrisiko darstellen.
Schließen Sie die .npmrc
Datei nicht ein, wenn Sie keine privaten Repositorys verwenden, da dies die Bereitstellungszeit für Ihre Funktionen verlängern kann.
Datei Format
Wenn Sie eine .npmrc
Datei zum Festlegen eines benutzerdefinierten Authentifizierungstokens verwenden, sollte diese die unten gezeigte Zeile enthalten.
//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN
Ersetzen:
- REGISTRY_DOMAIN : der Domänenname Ihrer privaten NPM-Registrierung. Wenn Ihr Repository bei
npmjs.org
gehostet wird, legen Sie dieses Feld aufregistry.npmjs.org
fest. AUTH_TOKEN : das Autorisierungstoken für Ihre npm-Registrierung. Dies kann entweder der literale Textwert des Tokens oder die Textzeichenfolge
${NPM_TOKEN}
sein, dienpm
durch den tatsächlichen Tokenwert aus der Umgebung ersetzt.Sie können die Umgebungsvariable
$NPM_TOKEN
mit dem Argument--set-build-env-vars
für Ihrengcloud functions deploy
festlegen. Weitere Informationen zum NPM-Authentifizierungstoken finden Sie im NPM-Tutorial zu privaten Modulen .