web-dev-qa-db-fra.com

Fonctions de débogage en VS Code

À partir de VS Code terminal intégré, je lance firebase serve --only functions,hosting.__ puis, dans l'onglet de débogage, j'ai créé le fichier launch.json par défaut:

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

Je veux déboguer le côté serveur (functions/index.js) et non le côté client.

J'ai essayé une configuration de https://code.visualstudio.com/docs/nodejs/nodejs-debugging sans succès.

Comment déboguer des fonctions Firebase dans VS Code?

12
Alin C

Vous ne pouvez pas déboguer les fonctions Firebase sans définir au préalable les variables de configuration Firebase. Firebase CLI le fait pour vous. 

Pour déboguer, vous pouvez utiliser la même astuce que pour le test unitaire des fonctions Firebase. 

Ajoutez 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 maintenant déboguer les fonctions Firebase de la même manière que n'importe quelle autre fonction Google Cloud: 

  1. Installez l’émulateur de fonctions cloud:

    npm install -g @google-cloud/functions-emulator
    
  2. Démarrer l'émulateur:

    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 de débogueur Node.js standard:

    functions debug helloWorldFunction
    

    Tu auras:

    Debugger for helloWorldFunction listening on port 5858.
    
  5. Ajoutez maintenant les lignes suivantes à votre code VS launch.json 

    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Node.JS (local)",
                "type": "node",
                "request": "attach",
                "port": 5858
            }
        ]
    }
    
  6. Commencez le débogage dans votre code de VS et déclenchez votre fonction en appelant l’URL de l’étape 3. 

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

Pour plus de détails, reportez-vous aux instructions ici Fonctions cloud Emulateur local .

4
Andrew Veresov
  • npm install -g @ google-cloud/functions-emulator

  • /functions/index.js

const admin = require('firebase-admin');

if (!admin.apps.length)
    admin.initializeApp({
    apiKey: "... your api key",
    authDomain: "... your auth domain",
    databaseURL: "... your database url",
    projectId: "... your project id",
    storageBucket: "... your storage bucket",
    messagingSenderId: "... your messaging sender id"
});
  • /.vscode/launch.json
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.Microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "attach",
            "name": "Attach Firebase",
            "port": 9229,
            "preLaunchTask": "Google Cloud Emulator"
        }
    ]
}
  • /.vscode/tasks.json
{
// See https://go.Microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
    {
        "label": "Start",
        "type": "Shell",
        "command": "functions",
        "isBackground": true,
        "args": [
            "start"
        ],
        "group": "build"
    },
    {
        "label": "Deploy",
        "type": "Shell",
        "command": "functions",
        "isBackground": true,
        "options": {
            "cwd": "${workspaceFolder}/functions/"
        },
        "args": [
            "deploy",
            "--trigger-http",
            "--timeout",
            "600s",
            "api"
        ],
        "dependsOn": [
            "Start"
        ],
        "group": "build"
    },
    {
        "label": "Inspect",
        "type": "Shell",
        "command": "functions",
        "isBackground": true,
        "options": {
            "cwd": "${workspaceFolder}/functions/"
        },
        "args": [
            "inspect",
            "api"
        ],
        "dependsOn": [
            "Deploy"
        ],
        "group": "build"
    },
    {
        "label": "Google Cloud Emulator",
        "dependsOn": [
            "Inspect",
        ],
        "group": "build"
    },
]

}

  • démarrer le débogage "Attach Firebase"
1

Je viens de répondre à cette question en utilisant Firebase Functions v1.0 sur une autre question: Débogage des fonctions cloud de Firebase

Vous pouvez le faire fonctionner avec Visual Studio Code à l’aide des fonctions 1.0 de Firebase sans rien changer au code de fonction.

En gros, vous devez simplement définir correctement la variable d’environnement FIREBASE_CONFIG lors de l’exécution de la commande functions deploy . Quelque chose comme (n’oubliez pas d’échapper des caractères "):

FIREBASE_CONFIG="{\"databaseURL\":\"https://YOUR-FIREBASE-PROJECT.firebaseio.com\",\"storageBucket\":\"YOUR-FIREBASE-PROJECT.appspot.com\",\"projectId\":\"YOUR-FIREBASE-PROJECT\"}
functions deploy --trigger-http --timeout 600s FUNCTION_NAME

Après cela, il vous suffit de parcourir le functions debug FUNCTION_NAME pour démarrer la fonction et attacher votre débogueur vs Code.

0
mwebler