Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Utiliser TypeScript pour les fonctions cloud

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Pour les développeurs qui préfèrent écrire des fonctions dans TypeScript, Cloud Functions propose deux types d'assistance :

  • Créez et configurez des projets TypeScript pour la transpilation automatique à 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 au JavaScript vanille lors de l'écriture de fonctions :

  • TypeScript prend en charge les dernières fonctionnalités JavaScript comme async/wait, simplifiant la gestion des promesses
  • Un linter Cloud Functions met en évidence les problèmes courants pendant que vous codez
  • La sécurité de type vous aide à éviter les erreurs d'exécution dans les fonctions déployées

Si vous débutez avec 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 offre des options pour 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, décommentez 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 avez un projet TypeScript existant, vous pouvez ajouter un crochet de pré-déploiement pour vous assurer que votre projet est transpilé chaque fois que vous déployez votre code sur Cloud Functions pour Firebase. Vous aurez besoin d'un fichier tsconfig.json correctement formé et d'un projet Firebase, et vous devrez apporter les modifications suivantes à votre configuration Firebase :

  1. Modifiez package.json pour ajouter un script bash afin de créer votre projet TypeScript. Par exemple:

     {
       "name": "functions",
       "scripts": {
         "build": "npm run lint && tsc"
       }
     ...
    
  2. Modifiez firebase.json pour ajouter un crochet de pré-déploiement afin d'exécuter le script de construction. Par exemple:

     {
       "functions": {
         "predeploy": "npm --prefix functions run build",
       }
     }
    

Avec cette configuration, une firebase deploy --only functions crée votre code TypeScript et le déploie en tant que fonctions.

Migrer un projet JavaScript existant vers TypeScript

Si vous avez un projet Cloud Functions existant que vous avez initialisé et développé en JavaScript, vous pouvez le migrer vers TypeScript. Vous êtes fortement encouragé à créer un point de contrôle git ou une autre sauvegarde avant de commencer.

Pour migrer un projet JavaScript Cloud Functions existant :

  1. Créez un point de contrôle git et enregistrez des copies de vos fichiers source JavaScript existants.
  2. Dans le répertoire du projet, exécutez les fonctions firebase init functions et sélectionnez TypeScript lorsque vous êtes invité à choisir un langage pour les fonctions d'écriture.
  3. Lorsque vous êtes invité à remplacer le fichier package.json existant, sélectionnez Non , sauf si vous êtes sûr de ne pas vouloir conserver le fichier existant.
  4. Supprimez index.ts dans le répertoire functions/src , en le remplaçant par votre code source existant.
  5. Dans le fichier tsconfig.json créé à l'initialisation, définissez les options du compilateur pour autoriser JavaScript : "allowJs": true .
  6. Copiez votre fichier package.json enregistré dans le répertoire functions et modifiez-le pour définir "main" sur "lib/index.js" .
  7. Toujours dans package.json , ajoutez un script de génération pour TypeScript comme suit :

     {
       "name": "functions",
       "scripts": {
         "build": "npm run lint && tsc"
       }
     ...
    
  8. Ajoutez "typescript" en tant que dépendance de développement en exécutant npm install --save-dev typescript @typescript-eslint/eslint-plugin @typescript-eslint/parser .

  9. Pour toutes les dépendances, exécutez npm install --save @types/<dependency> .

  10. Réécrivez le code source de .js à .ts comme vous le souhaitez.

Émulation de fonctions TypeScript

Pour tester les fonctions TypeScript localement, vous pouvez utiliser les outils d'émulation décrits dans Exécuter les fonctions localement . Il est important de compiler votre code avant d'utiliser ces outils, alors assurez-vous d'exécuter npm run build dans votre répertoire functions 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 à la fois la construction et servent/démarrent le shell de fonctions.

Journaux des fonctions pour les projets TypeScript

Lors du déploiement de Firebase , le index.ts firebase deploy votre projet est transpilé vers index.js , ce qui signifie que le journal Cloud Functions affichera les numéros de ligne du fichier index.js et non le code que vous avez écrit. Pour vous faciliter la recherche des chemins et des numéros de ligne correspondants dans index.ts , firebase deploy crée functions/lib/index.js.map . Vous pouvez utiliser cette carte source dans votre IDE préféré ou via un module de nœud .

,

Pour les développeurs qui préfèrent écrire des fonctions dans TypeScript, Cloud Functions propose deux types d'assistance :

  • Créez et configurez des projets TypeScript pour la transpilation automatique à 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 au JavaScript vanille lors de l'écriture de fonctions :

  • TypeScript prend en charge les dernières fonctionnalités JavaScript comme async/wait, simplifiant la gestion des promesses
  • Un linter Cloud Functions met en évidence les problèmes courants pendant que vous codez
  • La sécurité de type vous aide à éviter les erreurs d'exécution dans les fonctions déployées

Si vous débutez avec 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 offre des options pour 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, décommentez 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 avez un projet TypeScript existant, vous pouvez ajouter un crochet de pré-déploiement pour vous assurer que votre projet est transpilé chaque fois que vous déployez votre code sur Cloud Functions pour Firebase. Vous aurez besoin d'un fichier tsconfig.json correctement formé et d'un projet Firebase, et vous devrez apporter les modifications suivantes à votre configuration Firebase :

  1. Modifiez package.json pour ajouter un script bash afin de créer votre projet TypeScript. Par exemple:

     {
       "name": "functions",
       "scripts": {
         "build": "npm run lint && tsc"
       }
     ...
    
  2. Modifiez firebase.json pour ajouter un crochet de pré-déploiement afin d'exécuter le script de construction. Par exemple:

     {
       "functions": {
         "predeploy": "npm --prefix functions run build",
       }
     }
    

Avec cette configuration, une firebase deploy --only functions crée votre code TypeScript et le déploie en tant que fonctions.

Migrer un projet JavaScript existant vers TypeScript

Si vous avez un projet Cloud Functions existant que vous avez initialisé et développé en JavaScript, vous pouvez le migrer vers TypeScript. Vous êtes fortement encouragé à créer un point de contrôle git ou une autre sauvegarde avant de commencer.

Pour migrer un projet JavaScript Cloud Functions existant :

  1. Créez un point de contrôle git et enregistrez des copies de vos fichiers source JavaScript existants.
  2. Dans le répertoire du projet, exécutez les fonctions firebase init functions et sélectionnez TypeScript lorsque vous êtes invité à choisir un langage pour les fonctions d'écriture.
  3. Lorsque vous êtes invité à remplacer le fichier package.json existant, sélectionnez Non , sauf si vous êtes sûr de ne pas vouloir conserver le fichier existant.
  4. Supprimez index.ts dans le répertoire functions/src , en le remplaçant par votre code source existant.
  5. Dans le fichier tsconfig.json créé à l'initialisation, définissez les options du compilateur pour autoriser JavaScript : "allowJs": true .
  6. Copiez votre fichier package.json enregistré dans le répertoire functions et modifiez-le pour définir "main" sur "lib/index.js" .
  7. Toujours dans package.json , ajoutez un script de génération pour TypeScript comme suit :

     {
       "name": "functions",
       "scripts": {
         "build": "npm run lint && tsc"
       }
     ...
    
  8. Ajoutez "typescript" en tant que dépendance de développement en exécutant npm install --save-dev typescript @typescript-eslint/eslint-plugin @typescript-eslint/parser .

  9. Pour toutes les dépendances, exécutez npm install --save @types/<dependency> .

  10. Réécrivez le code source de .js à .ts comme vous le souhaitez.

Émulation de fonctions TypeScript

Pour tester les fonctions TypeScript localement, vous pouvez utiliser les outils d'émulation décrits dans Exécuter les fonctions localement . Il est important de compiler votre code avant d'utiliser ces outils, alors assurez-vous d'exécuter npm run build dans votre répertoire functions 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 à la fois la construction et servent/démarrent le shell de fonctions.

Journaux des fonctions pour les projets TypeScript

Lors du déploiement de Firebase , le index.ts firebase deploy votre projet est transpilé vers index.js , ce qui signifie que le journal Cloud Functions affichera les numéros de ligne du fichier index.js et non le code que vous avez écrit. Pour vous faciliter la recherche des chemins et des numéros de ligne correspondants dans index.ts , firebase deploy crée functions/lib/index.js.map . Vous pouvez utiliser cette carte source dans votre IDE préféré ou via un module de nœud .