Für Entwickler, die es vorziehen, Funktionen in TypeScript zu schreiben, bietet Cloud Functions zwei Arten von Unterstützung:
- Erstellen und konfigurieren Sie TypeScript-Projekte für die automatische Transpilation bei der Initialisierung (
firebase init functions
). - Transpilieren Sie vorhandene TypeScript-Quellen zum Zeitpunkt der Bereitstellung über einen Predeploy-Hook in JavaScript.
Befolgen Sie die Anweisungen in diesem Handbuch, um ein vorhandenes JavaScript-Projekt zu TypeScript zu migrieren und mit der Bereitstellung von Funktionen fortzufahren, indem Sie einen Predeploy-Hook verwenden, um Ihren Quellcode zu transpilieren. TypeScript bietet beim Schreiben von Funktionen viele Vorteile gegenüber Vanilla-JavaScript:
- TypeScript unterstützt die neuesten JavaScript-Funktionen wie async/await und vereinfacht die Promise-Verwaltung
- Ein Cloud Functions-Linter hebt häufige Probleme beim Programmieren hervor
- Typsicherheit hilft Ihnen, Laufzeitfehler in bereitgestellten Funktionen zu vermeiden
Wenn Sie neu bei TypeScript sind, lesen Sie TypeScript in 5 Minuten .
Initialisieren eines neuen Cloud Functions-Projekts mit TypeScript
Führen Sie firebase init functions
in einem neuen Verzeichnis aus. Das Tool bietet Ihnen Optionen zum Erstellen des Projekts mit JavaScript oder TypeScript. Wählen Sie TypeScript, um die folgende Projektstruktur auszugeben:
myproject
+- functions/ # Directory containing all your functions code
|
+- package.json # npm package file describing your Cloud Functions code
|
+- tsconfig.json
|
+- .eslintrc.js # Optional file if you enabled ESLint
+- tsconfig.dev.json # Optional file that references .eslintrc.js
|
+- src/ # Directory containing TypeScript source
| |
| +- index.ts # main source file for your Cloud Functions code
|
+- lib/
|
+- index.js # Built/transpiled JavaScript code
|
+- index.js.map # Source map for debugging
Wenn die Initialisierung abgeschlossen ist, kommentieren Sie das Beispiel in index.ts aus und führen Sie npm run serve
eine „Hello World“-Funktion in Aktion zu sehen.
Verwenden eines vorhandenen TypeScript-Projekts
Wenn Sie ein vorhandenes TypeScript-Projekt haben, können Sie einen Predeploy-Hook hinzufügen, um sicherzustellen, dass Ihr Projekt jedes Mal transpiliert wird, wenn Sie Ihren Code in Cloud Functions for Firebase bereitstellen. Sie benötigen eine ordnungsgemäß formatierte tsconfig.json
Datei und ein Firebase-Projekt, und Sie müssen die folgenden Änderungen an Ihrer Firebase-Konfiguration vornehmen:
Bearbeiten Sie
package.json
, um ein Bash-Skript zum Erstellen Ihres TypeScript-Projekts hinzuzufügen. Zum Beispiel:{ "name": "functions", "scripts": { "build": "npm run lint && tsc" } ...
Bearbeiten Sie
firebase.json
um einen Predeploy-Hook zum Ausführen des Build-Skripts hinzuzufügen. Zum Beispiel:{ "functions": { "predeploy": "npm --prefix functions run build", } }
Bei dieser Konfiguration erstellt ein firebase deploy --only functions
Befehl Ihren TypeScript-Code und stellt ihn als Funktionen bereit.
Migrieren eines vorhandenen JavaScript-Projekts zu TypeScript
Wenn Sie ein vorhandenes Cloud Functions-Projekt haben, das Sie in JavaScript initialisiert und entwickelt haben, können Sie es zu TypeScript migrieren. Es wird dringend empfohlen, vor dem Start einen Git-Checkpoint oder ein anderes Backup zu erstellen.
So migrieren Sie ein vorhandenes JavaScript Cloud Functions-Projekt:
- Erstellen Sie einen Git-Checkpoint und speichern Sie Kopien Ihrer vorhandenen JavaScript-Quelldateien.
- Führen Sie im Projektverzeichnis
firebase init functions
aus und wählen SieTypeScript
aus, wenn Sie nach einer Sprache zum Schreiben von Funktionen gefragt werden. - Wenn Sie gefragt werden, ob die vorhandene Datei
package.json
überschrieben werden soll, wählen Sie Nein aus, es sei denn, Sie sind sich sicher, dass Sie die vorhandene Datei nicht behalten möchten. - Löschen Sie
index.ts
im Verzeichnisfunctions/src
und ersetzen Sie es durch Ihren vorhandenen Quellcode. - Legen Sie in der bei der Initialisierung erstellten Datei
tsconfig.json
die Compileroptionen fest, um JavaScript zuzulassen:"allowJs": true
. - Kopieren Sie Ihre gespeicherte Datei „
package.json
in das Verzeichnis „functions
und bearbeiten Sie sie, um"main"
auf"lib/index.js"
zu setzen. Fügen Sie außerdem in
package.json
ein Build-Skript für TypeScript wie das folgende hinzu:{ "name": "functions", "scripts": { "build": "npm run lint && tsc" } ...
Fügen Sie
"typescript"
als Dev-Abhängigkeit hinzu, indemnpm install --save-dev typescript @typescript-eslint/eslint-plugin @typescript-eslint/parser
ausführen.Führen Sie für alle Abhängigkeiten
npm install --save @types/<dependency>
aus.Schreiben Sie den Quellcode wie gewünscht von .js in .ts um.
Emulieren von TypeScript-Funktionen
Um TypeScript-Funktionen lokal zu testen, können Sie die unter Funktionen lokal ausführen beschriebenen Emulationstools verwenden. Es ist wichtig, dass Sie Ihren Code kompilieren, bevor Sie diese Tools verwenden. Stellen Sie daher sicher, dass Sie npm run build
in Ihrem Funktionsverzeichnis ausführen, bevor Sie firebase emulators:start
oder firebase functions:shell
ausführen. Alternativ können Sie npm run serve
oder npm run shell
als Abkürzung ausführen; Diese Befehle führen sowohl den Build aus als auch dienen/starten die Funktions-Shell.
Funktionsprotokolle für TypeScript-Projekte
Während firebase deploy
wird index.ts
Ihres Projekts in index.js
transpiliert, was bedeutet, dass das Cloud Functions-Protokoll Zeilennummern aus der Datei index.js
und nicht aus dem von Ihnen geschriebenen Code ausgibt. Um Ihnen das Auffinden der entsprechenden Pfade und Zeilennummern in index.ts
zu erleichtern, erstellt firebase deploy
functions/lib/index.js.map
. Sie können diese Quellkarte in Ihrer bevorzugten IDE oder über ein Node-Modul verwenden.