7

De VS Code Terminal intégré je lance firebase serve --only functions,hosting puis dans l'onglet de débogage j'ai créé le launch.json par défaut:Fonctions de débogage dans le code VS

{ 
    "version": "0.2.0", 
    "configurations": [ 
    { 
     "type": "node", 
     "request": "launch", 
     "name": "Launch Program", 
     "program": "${file}" 
    } 
    ] 
} 

Je veux déboguer le côté serveur (fonctions/index.js) pas le côté client.

J'ai essayé une configuration de https://code.visualstudio.com/docs/nodejs/nodejs-debugging sans aucune chance. Comment déboguer les fonctions Firebase dans VS Code?

+0

Le débogage via des tests unitaires est probablement votre meilleure option en ce moment: https://firebase.google.com/docs/functions/unit-testing –

+0

Pas l'option préférée mais si c'est le seul qui fonctionne, je vais avec ça . –

Répondre

3

Vous ne pouvez pas déboguer des fonctions Firebase sans d'abord définir les variables de configuration Firebase. Firebase CLI le fait pour vous.

Pour déboguer, vous pouvez essayer le même truc que pour le test unitaire des fonctions Firebase.

Ajouter les lignes suivantes au fichier index.js avant d'appeler admin.initializeApp(functions.config().firebase):

admin.initializeApp = function() {} 
functions.config = function() { 
    return { 
     firebase: { 
      databaseURL: 'https://not-a-project.firebaseio.com', 
      storageBucket: 'not-a-project.appspot.com', 
     } 
    }; 
} 

Vous pouvez déboguer les fonctions Firebase maintenant d'une même manière que toute autre fonction de nuage google:

  1. Installer l'émulateur des fonctions du nuage:

    npm install -g @google-cloud/functions-emulator 
    
  2. St es Emulator:

    functions start 
    
  3. Déployez votre fonction:

    functions deploy helloWorldFunction --trigger-http 
    

    Vous obtiendrez une sortie comme ceci:

    Waiting for operation to finish...done. 
    Deploying function........done. 
    Function helloWorldFunction deployed. 
    
    Property | Value 
    ---------|------------------------------------------------------------------------ 
    Name  | helloWorldFunction 
    Trigger | HTTP 
    Resource | http://localhost:8010/helloWorldProject/us-central1/helloWorldFunction 
    
  4. Pour déboguer en utilisant le type standard Node.js Debugger:

    functions debug helloWorldFunction 
    

    Vous obtiendrez:

    Debugger for helloWorldFunction listening on port 5858. 
    
  5. Maintenant, ajoutez les lignes suivantes à votre launch.json VS code

    { 
        "version": "0.2.0", 
        "configurations": [ 
         { 
          "name": "Node.JS (local)", 
          "type": "node", 
          "request": "attach", 
          "port": 5858 
         } 
        ] 
    } 
    
  6. Démarrer le débogage dans votre code VS et déclencher votre fonction en appelant URL que vous avez à l'étape # 3.

    Vous pouvez également déclencher la fonction en tapant functions call helloWorldFunction dans le terminal.

Pour plus de détails, voir les instructions ici Cloud Functions Local Emulator.

+0

Je reçois des erreurs en essayant de déployer.Je recherche sur google, rien n'y fait, j'abandonne. –

+0

Salut Andrew! Votre réponse a été impressionnante, mais j'ai dû faire quelques corrections pour que cela fonctionne. Tout d'abord, la ligne "admin.initializeApp = function() {}" doit être supprimée; En fait, le prochain appel à admin.initializeApp est inutile. Deuxièmement, veuillez préciser que not-a-project.firebaseio.com doit contenir l'adresse correcte pour votre application Firebase; c'est un peu ambigu avec le nom de non-un-projet. Enfin, dans l'objet firebase de functions.config, j'ai dû définir 'credential: admin.credential.applicationDefault()'. Avec ces modifications, j'ai pu exécuter l'émulateur et déboguer sur VSCode –

+0

Je suis un peu surpris que vous suggériez d'installer et d'utiliser l'émulateur de fonctions GCP lorsque l'émulateur de fonctions Firebase serait déjà installé. Je suppose qu'ils sont à peu près la même chose mais qu'il est plus logique d'utiliser les outils/émulateur de fonctions FB lors de l'utilisation des fonctions FB. – Tom