Отладка автономной функции без сервлера с помощью 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:являются важной частью и должны помочь вам получить то, что вам нужно