Невозможно отладить бессерверное приложение в Visual Studio Code

Я попытался отладить бессерверное приложение, разработанное с использованием бессерверного фреймворка, в коде 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",
            "{}"
        ]

    }
]

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


person Wella    schedule 01.08.2017    source источник
comment
Столкнувшись с той же проблемой. Он работает с консоли, но не через конфигурацию отладки. Пожалуйста, дайте мне знать, если найдете решение.   -  person Mehaboob Khan    schedule 03.08.2017


Ответы (4)


Я попытался подписаться на в той же статье, и возникла та же ошибка. Добавление 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

person Mike Patrick    schedule 09.12.2017
comment
Работал как шарм. - person João Miguel; 07.03.2018
comment
БЛАГОДАРЮ ВАС! Выдергивал мои волосы из-за этого. - person MungeWrath; 10.03.2018
comment
В моей ситуации, несмотря на то, что я указал $ {workspaceRoot} / node_nodules / serverless / bin / serverless, и этот путь был правильно разрешен для установки --save-dev фактического бессерверного модуля, VS Code не будет работать без сервера, что приведет к Attribute "программа" не существует. Однако изменение программы на /Users/username/.nvm/versions/node/v8.10.0/bin/serverless действительно сработало. - person jarmod; 21.03.2019

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

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

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

"outFiles": [
    "${workspaceRoot}/**/*.js"
]
person Rich Buggy    schedule 05.08.2017
comment
Я попытался добавить файлы outFiles, но все равно получаю ту же ошибку. он не связан с этим, и код VS всегда выдает эту ошибку комментария при возникновении любой другой ошибки. Установка атрибута outDir или outFiles может помочь. - person Wella; 05.08.2017

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

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

--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
          }
      ]
    }
    
person DisplayName    schedule 15.05.2019

Обновление на 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?

person MSOACC    schedule 26.11.2020