Не удается отладить серверное приложение в коде Visual Studio

Я пытался отлаживать безсерверное приложение, разработанное с использованием бессерверной инфраструктуры в коде VS. Я следил за этой статьей.

Но когда я пытаюсь отладить код, я получаю ошибку из кода VS, как показано ниже.

Невозможно запустить программу 'g:\Projects\Serverless1\node_modules.bin\sls'; установка атрибута outDir или outFiles может помочь.

командный файл sls уже существует в папке, и ниже приведены настройки файла 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",
            "{}"
        ]

    }
]

Пожалуйста, помогите мне решить эту проблему.

2 ответа

Я попытался следовать той же статье и испытал ту же ошибку. Добавление outFiles не помогло, хотя это изменило мое сообщение об ошибке на:

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

Я не могу объяснить, почему VSCode имеет проблемы с исполняемым файлом в node_modules/.bin, но если я укажу на node_modules/serverless/bin вместо этого все работает как положено:

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

Вот моя полная рабочая конфигурация, где мое тестовое событие JSON существует в sample-event.json в корне проекта:

{
    "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
            ]
        }
    ]
}

Использование Serverless ^1.26.1, Node 8.9.4 LTS, VSCode 1.20.1

Ни одно из решений не помогло мне, так что вот моя модификация в качестве ресурса. Кроме того, несколько сотрудников могли атаковать, просто включив автоматическое присоединение и используя локальные ключевые слова invoke.

Ниже приведен фрагмент файла launch.json, который в итоге сработал для меня. /w комментарии для ясности, где моя функция называется Процессор.

--function или -f Имя функции в вашей службе, которую вы хотите вызвать локально.

--path или -p Путь к файлу json, содержащему входные данные, которые необходимо передать вызываемой функции в качестве события. Этот путь относительно корневого каталога службы.

--stage или -s Этап в вашем сервисе, на котором вы хотите вызвать свою функцию.

  • "без сервера": "^1.30.3"
  • "serverless-plugin-typescript": "^1.1.5",
  • узел: 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
          }
      ]
    }
    

Чтобы отладка работала с TypeScript, мне нужно было добавить outFiles установить в папку, куда идет мой скомпилированный код.

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

Я не пытался отладить прямой JS, но я бы предположил, что это что-то вроде этого.

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

Обновление на 2020 год:

Сделайте то, что утверждают другие руководства, и настройте свой проект с launch.json файл.

Проблема заключалась в том, что предполагаемый файл "program": "${workspaceRoot}/node_modules/.bin/sls" выкинул ошибку.

Я изменил это на "${workspaceRoot}/node_modules/serverless/bin/serverless"и это сработало. Вот полный файл:

.vscode / launch.json:

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Serverless debug",
            "program": "${workspaceRoot}/node_modules/serverless/bin/serverless",
            "args": [
                "invoke",
                "local",
                "-f",
                "hello",
                "--data",
                "{}"
            ]
        }
    ]
}

Имейте в виду, что аргумент helloэто имя функции, которую я хочу отлаживать. Я думаю, что предполагаемый вариант использования должен заключаться в том, чтобы вы изменили имя файла для любой функции, которую хотите вызвать. Может быть, кто-нибудь сможет создать для этого плагин VSCode?

Другие вопросы по тегам