Отладка автономной функции без сервлера с помощью VSCode - проблема с исходной картой?
Я создал простую почтовую функцию для AWS Lambda без использования сервера. Для разработки я использую serverless-offline для репликации функциональности Lambda и использую VSCode в качестве моей IDE. Я также использую serverless-webpack для генерации результирующего кода.
При установке точек останова в моем коде в VSCode они выдолблены и помечены как "Несвязанные" и не срабатывают, но когда я вставляю
debugger;
оператор, выполнение останавливается, как должно. (примечание, выполнение останавливается с
debugger;
и помещает меня в исходный файл, а не в результирующий файл - не знаю, почему это - магия webpack? Я не установил здесь исходные карты, что может быть частью проблемы здесь, но действительно не уверен)
Моя конфигурация launch.json для VSCode для запуска моего экземпляра отладки serverless-offline:
{
"name": "serverless",
"type": "node",
"request": "launch",
"cwd": "${workspaceFolder}/serverless",
"runtimeExecutable": "/home/me/.nvm/versions/node/v14.7.0/bin/npm",
"runtimeArgs": [
"run",
"debug"
],
"port": 9229
}
Запускаемый сценарий npm:
"debug": "export SLS_DEBUG=* && node --lazy ./node_modules/.bin/serverless offline -s dev"
Конфигурация, используемая serverless-webpack (исключительно для того, чтобы я мог ввести некоторые переменные env):
const slsw = require('serverless-webpack');
const Dotenv = require('dotenv-webpack');
const path = require('path');
const stage = slsw.lib.options.stage == 'prod' ? 'production' : 'development'
module.exports = {
mode: stage,
entry: slsw.lib.entries,
target: 'node',
plugins: [
new Dotenv({
path: path.resolve(__dirname, '../.env.'.concat(stage)),
safe: false,
allowEmptyValues: false,
silent: false
})
]
}
Любая помощь приветствуется! Просто хотел бы знать, как это нормально отлаживать с помощью обычных точек останова и не полагаться на вставку
debugger;
везде, где я хочу проверить работающий код.
1 ответ
Моя команда столкнулась с аналогичной проблемой, используя
serverless-bundle
который в основном представляет собой просто слой абстракции поверх
serverless-webpack
. Что помогло в нашем случае, так это добавить что-то вроде следующего в наш объект конфигурации отладки:
"sourceMapPathOverrides": {
"webpack:///./~/*": "${workspaceFolder}/node_modules/*",
"webpack://?:*/*": "${workspaceFolder}/.webpack/*"
}
Обратите внимание, что пути из
${workspaceFolder}
может отличаться в зависимости от структуры вашего проекта. Это не совсем то, что у нас, поскольку мы используем входные переменные в путях, но ключи, начинающиеся с
webpack:
являются важной частью и должны помочь вам получить то, что вам нужно