Deweloperom, którzy wolą pisać funkcje w TypeScript, Cloud Functions zapewnia 2 rodzaje wsparcia:
- tworzyć i konfigurować projekty TypeScript na potrzeby automatycznej transpilacji podczas inicjowania (
firebase init functions); - Transpiluj istniejący kod źródłowy TypeScript do JavaScriptu w momencie wdrażania za pomocą punktu zaczepienia przed wdrożeniem.
Postępując zgodnie z instrukcjami podanymi w tym przewodniku, możesz przenieść istniejący projekt JavaScript do TypeScript i nadal wdrażać funkcje za pomocą punktu zaczepienia przed wdrożeniem, aby transpilować kod źródłowy. TypeScript oferuje wiele korzyści w porównaniu z czystym JavaScriptem podczas pisania funkcji:
- TypeScript obsługuje najnowsze funkcje JavaScriptu, takie jak async/await, co upraszcza zarządzanie obietnicami.
- Cloud Functions linter wyróżnia typowe problemy podczas kodowania
- Zabezpieczenia wpisywania pomagają uniknąć błędów środowiska wykonawczego we wdrożonych funkcjach.
Jeśli dopiero zaczynasz korzystać z TypeScript, zapoznaj się z artykułem TypeScript in 5 minutes (TypeScript w 5 minut).
Inicjowanie nowego projektu Cloud Functions z TypeScript
Uruchom firebase init functions w nowym katalogu. Narzędzie umożliwia utworzenie projektu w języku JavaScript lub TypeScript. Wybierz TypeScript, aby wygenerować tę strukturę projektu:
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
Po zakończeniu inicjowania usuń komentarz z przykładowego kodu w pliku index.ts i uruchom polecenie npm run serve, aby zobaczyć, jak działa funkcja „Hello World”.
Używanie istniejącego projektu TypeScript
Jeśli masz już projekt TypeScript, możesz dodać punkt zaczepienia przed wdrożeniem, aby mieć pewność, że projekt będzie transpilowany za każdym razem, gdy wdrożysz kod w Cloud Functions for Firebase. Potrzebujesz prawidłowo sformatowanego pliku tsconfig.json i projektu w Firebase. Musisz też wprowadzić te zmiany w konfiguracji Firebase:
Zmodyfikuj plik
package.json, aby dodać skrypt bash do kompilacji projektu TypeScript. Przykład:{ "name": "functions", "scripts": { "build": "npm run lint && tsc" } ...Zmodyfikuj plik
firebase.json, aby dodać punkt zaczepienia przed wdrożeniem, który uruchomi skrypt kompilacji. Przykład:{ "functions": { "predeploy": "npm --prefix functions run build", } }
Przy tej konfiguracji polecenie firebase deploy --only functions kompiluje kod TypeScript i wdraża go jako funkcje.
Migracja istniejącego projektu JavaScript do TypeScript
Jeśli masz już projekt Cloud Functions, który został zainicjowany i opracowany w języku JavaScript, możesz go przenieść do TypeScript. Zanim zaczniesz, zdecydowanie zalecamy utworzenie punktu kontrolnego git lub innej kopii zapasowej.
Aby przenieść istniejący projekt JavaScript Cloud Functions:
- Utwórz punkt kontrolny git i zapisz kopie istniejących plików źródłowych JavaScriptu.
- W katalogu projektu uruchom
firebase init functionsi wybierzTypeScript, gdy pojawi się prośba o wybranie języka do pisania funkcji. - Gdy pojawi się pytanie, czy zastąpić istniejący plik
package.json, wybierz Nie, chyba że masz pewność, że nie chcesz zachować istniejącego pliku. - Usuń
index.tsw katalogufunctions/srci zastąp go istniejącym kodem źródłowym. - W pliku
tsconfig.jsonutworzonym podczas inicjowania ustaw opcje kompilatora tak, aby zezwalał na JavaScript:"allowJs": true. - Skopiuj zapisany plik
package.jsondo katalogufunctionsi edytuj go, aby ustawić"main"na"lib/index.js". W pliku
package.jsondodaj też skrypt kompilacji dla TypeScript, na przykład:{ "name": "functions", "scripts": { "build": "npm run lint && tsc" } ...Dodaj
"typescript"jako zależność deweloperską, uruchamiającnpm install --save-dev typescript @typescript-eslint/eslint-plugin @typescript-eslint/parser.Aby wyświetlić wszystkie zależności, uruchom polecenie
npm install --save @types/<dependency>.Zmień kod źródłowy z .js na .ts zgodnie z potrzebami.
Emulowanie funkcji TypeScript
Aby przetestować funkcje TypeScript lokalnie, możesz użyć narzędzi do emulacji opisanych w artykule Uruchamianie funkcji lokalnie. Przed użyciem tych narzędzi należy skompilować kod, więc przed uruchomieniem polecenia firebase emulators:start lub firebase functions:shell uruchom polecenie npm run build w katalogu funkcji. Możesz też uruchomić npm run serve lub npm run shell jako skrót. Oba te polecenia uruchamiają kompilację i obsługują/uruchamiają powłokę funkcji.
Logi funkcji w projektach TypeScript
Podczas firebase deploy index.ts Twojego projektu jest transpilowany do index.js, co oznacza, że log Cloud Functions będzie wyświetlać numery wierszy z pliku index.js, a nie z napisanego przez Ciebie kodu. Aby ułatwić Ci znalezienie odpowiednich ścieżek i numerów wierszy w index.ts, firebase deploy tworzy functions/lib/index.js.map. Możesz użyć tej mapy źródła w preferowanym środowisku IDE lub za pomocą modułu węzła.