2

我使用无服务器为 AWS Lambda 创建了一个简单的邮件函数。对于开发,我使用 serverless-offline 来复制 Lambda 的功能并使用 VSCode 作为我的 IDE。我也在使用 serverless-webpack 来生成我的结果代码。

在 VSCode 中的代码中设置断点时,它们被挖空并被标记为“未绑定”并且不会触发,但是当我插入debugger;语句时,执行会按原样停止。(作为旁注,执行停止debugger;并将我放在我的源文件中 - 不是我的结果文件 - 不确定这是为什么 - webpack 魔术?我在这里没有设置源映射,这可能是这里问题的一部分,但真的不确定)

我的 VSCode 启动我的无服务器离线调试实例的 launch.json 配置是:

    {
        "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 使用的配置(纯粹是为了让我可以注入一些环境变量)是:

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;我想检查正在运行的代码的任何地方。

4

1 回答 1

0

我的团队遇到了与此类似的问题,serverless-bundle它基本上只是serverless-webpack. 在我们的案例中,有帮助的是在我们的调试配置对象中添加如下内容:

"sourceMapPathOverrides": {
  "webpack:///./~/*": "${workspaceFolder}/node_modules/*",
  "webpack://?:*/*": "${workspaceFolder}/.webpack/*"
}

请注意,来自的路径${workspaceFolder}可能会根据您的项目结构而有所不同。这不完全是我们的,因为我们在路径中使用输入变量,但是以开头的键webpack:是重要的部分,应该可以帮助你得到你想要的

于 2022-02-01T19:35:00.260 回答