Pour les développeurs qui préfèrent écrire des fonctions en TypeScript, Cloud Functions propose deux types de compatibilité :
- Créer et configurer des projets TypeScript pour la transpilation automatique lors de l'initialisation (
firebase init functions) - Transpilez la source TypeScript existante en JavaScript au moment du déploiement via un hook de prédéploiement.
En suivant les instructions de ce guide, vous pouvez migrer un projet JavaScript existant vers TypeScript et continuer à déployer des fonctions à l'aide d'un hook de prédéploiement pour transpiler votre code source. TypeScript offre de nombreux avantages par rapport à Vanilla JavaScript pour l'écriture de fonctions :
- TypeScript est compatible avec les dernières fonctionnalités JavaScript, comme async/await, ce qui simplifie la gestion des promesses.
- Un linter Cloud Functions met en évidence les problèmes courants pendant que vous codez.
- La sûreté du typage vous aide à éviter les erreurs d'exécution dans les fonctions déployées.
Si vous ne connaissez pas TypeScript, consultez TypeScript en 5 minutes.
Initialiser un nouveau projet Cloud Functions avec TypeScript
Exécutez firebase init functions dans un nouveau répertoire. L'outil vous permet de créer le projet avec JavaScript ou TypeScript. Choisissez TypeScript pour générer la structure de projet suivante :
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
Une fois l'initialisation terminée, annulez la mise en commentaire de l'exemple dans index.ts et exécutez npm run serve pour voir une fonction "Hello World" en action.
Utiliser un projet TypeScript existant
Si vous disposez d'un projet TypeScript, vous pouvez ajouter un hook de prédéploiement pour vous assurer que votre projet est transpilé chaque fois que vous déployez votre code sur Cloud Functions for Firebase. Vous aurez besoin d'un fichier tsconfig.json correctement formé et d'un projet Firebase. Vous devrez également apporter les modifications suivantes à votre configuration Firebase :
Modifiez
package.jsonpour ajouter un script bash afin de compiler votre projet TypeScript. Exemple :{ "name": "functions", "scripts": { "build": "npm run lint && tsc" } ...Modifiez
firebase.jsonpour ajouter un hook de prédéploiement afin d'exécuter le script de compilation. Exemple :{ "functions": { "predeploy": "npm --prefix functions run build", } }
Avec cette configuration, une commande firebase deploy --only functions compile votre code TypeScript et le déploie en tant que fonctions.
Migrer un projet JavaScript existant vers TypeScript
Si vous disposez d'un projet Cloud Functions existant que vous avez initialisé et développé en JavaScript, vous pouvez le migrer vers TypeScript. Nous vous recommandons vivement de créer un point de contrôle Git ou une autre sauvegarde avant de commencer.
Pour migrer un projet JavaScript Cloud Functions existant :
- Créez un point de contrôle Git et enregistrez des copies de vos fichiers sources JavaScript existants.
- Dans le répertoire du projet, exécutez
firebase init functionset sélectionnezTypeScriptlorsque vous êtes invité à choisir un langage pour l'écriture des fonctions. - Lorsque vous êtes invité à écraser le fichier
package.jsonexistant, sélectionnez Non, sauf si vous êtes sûr de ne pas vouloir conserver le fichier existant. - Supprimez
index.tsdans le répertoirefunctions/src, puis remplacez-le par votre code source existant. - Dans le fichier
tsconfig.jsoncréé lors de l'initialisation, définissez les options du compilateur pour autoriser JavaScript :"allowJs": true. - Copiez le fichier
package.jsonque vous avez enregistré dans le répertoirefunctions, puis modifiez-le pour définir"main"sur"lib/index.js". Toujours dans
package.json, ajoutez un script de compilation pour TypeScript, comme suit :{ "name": "functions", "scripts": { "build": "npm run lint && tsc" } ...Ajoutez
"typescript"en tant que dépendance de développement en exécutantnpm install --save-dev typescript @typescript-eslint/eslint-plugin @typescript-eslint/parser.Pour toutes les dépendances, exécutez
npm install --save @types/<dependency>.Réécrivez le code source de .js en .ts, si vous le souhaitez.
Émuler des fonctions TypeScript
Pour tester des fonctions TypeScript localement, vous pouvez utiliser les outils d'émulation décrits dans Exécuter des fonctions localement. Il est important de compiler votre code avant d'utiliser ces outils. Veillez donc à exécuter npm run build dans le répertoire de vos fonctions avant d'exécuter firebase emulators:start ou firebase functions:shell. Vous pouvez également exécuter npm run serve ou npm run shell comme raccourci. Ces commandes exécutent toutes deux la compilation et diffusent/démarrent le shell des fonctions.
Journaux Functions pour les projets TypeScript
Pendant firebase deploy, le fichier index.ts de votre projet est transcompilé en index.js, ce qui signifie que le journal Cloud Functions génère des numéros de ligne à partir du fichier index.js et non du code que vous avez écrit. Pour vous aider à trouver plus facilement les chemins d'accès et les numéros de ligne correspondants dans index.ts, firebase deploy crée functions/lib/index.js.map. Vous pouvez utiliser ce mappage source dans l'IDE de votre choix ou via un module de nœud.