Не удается отладить серверное приложение в коде 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?