web-dev-qa-db-fra.com

Impossible de déboguer une application sans serveur dans Visual Studio Code

J'ai essayé de déboguer une application sans serveur développée à l'aide d'un framework sans serveur en code VS. J'ai suivi this article.

Mais lorsque j'essaie de déboguer le code, j'obtiens une erreur du code VS comme ci-dessous.

Impossible de lancer le programme 'g:\Projects\Serverless1\node_modules.bin\sls'; la définition de l'attribut 'outDir ou outFiles' peut aider.

le fichier de commande sls existe déjà dans le dossier et voici les paramètres du fichier launch.json

"version": "0.2.0",
"configurations": [

    {
        "type": "node",
        "request": "launch",
        "protocol": "inspector",
        "name": "run hello function",
        "program": "${workspaceRoot}\\node_modules\\.bin\\sls",
        "args": [
            "invoke",
            "local",
            "-f",
            "hello",
            "--data",
            "{}"
        ]

    }
]

Veuillez m'aider à résoudre ce problème.

12
Wella

J'ai essayé de suivre le même article , et j'ai rencontré la même erreur. L'ajout de outFiles n'a pas aidé, bien qu'il ait changé mon message d'erreur en:

Cannot launch program 'd:\<path>\node_modules\.bin\sls' because corresponding JavaScript cannot be found.

Je ne peux pas expliquer pourquoi VSCode a un problème avec l'exécutable dans node_modules/.bin, mais si je pointe vers node_modules/serverless/bin à la place, les choses fonctionnent comme prévu:

"program": "${workspaceFolder}\\node_modules\\serverless\\bin\\serverless",

Voici ma configuration de travail complète, où mon événement de test JSON existe dans sample-event.json à la racine du projet:

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Debug Lambda",
            "program": "${workspaceFolder}/node_modules/serverless/bin/serverless",
            "args": [
                "invoke",
                "local",
                "-f",
                "<function-name>",
                "--data",
                "{}" // You can use this argument to pass data to the function to help with the debug
            ]
        }
    ]
}

Utilisation de Serverless ^ 1.26.1, Node 8.9.4 LTS, VSCode 1.20.1

22
Mike Patrick

Pour que le débogage fonctionne avec TypeScript, j'ai dû ajouter outFiles set au dossier où va mon code compilé.

"outFiles": [
    "${workspaceRoot}/dist/**/*.js"
]

Je n'ai pas essayé de déboguer directement JS mais je suppose que c'est quelque chose comme ça.

"outFiles": [
    "${workspaceRoot}/**/*.js"
]
1
Rich Buggy

Aucune des solutions n'a fonctionné pour moi, alors voici ma modification en tant que ressource. En outre, plusieurs collègues ont pu attaquer simplement en activant l'attachement automatique sur et en utilisant les mots clés locaux d'invocation.

Ci-dessous, un extrait avec le fichier launch.json qui a finalement fonctionné pour moi./w commentaires pour plus de clarté où ma fonction est nommée processeur.

--function ou -f Le nom de la fonction de votre service que vous souhaitez appeler localement.

--path ou -p Le chemin vers un fichier json contenant les données d'entrée à transmettre à la fonction invoquée comme événement. Ce chemin est relatif au répertoire racine du service.

--stage or -s L'étape de votre service dans laquelle vous souhaitez invoquer votre fonction.

  • "sans serveur": "^ 1.30.3"
  • "plug-in-serveur-TypeScript": "^ 1.1.5",
  • nœud: 8.10.0
  • npm: 5.6.0

    {
      "version": "0.2.0",
      "configurations": [
          {
              "type": "node",
              "request": "launch",
              "name": "Debug Lambda",
              "program": "${workspaceFolder}/node_modules/.bin/sls",
              "args": [
                  "invoke",
                  "local",
                  "-f",
                  "Processor",
                  "-p",
                  "./events/S3toLambda.json",
                  "-s",
                  "local"
              ],
              "autoAttachChildProcesses": true
          }
      ]
    }
    
0
DisplayName