【问题标题】:Cannot debug serverless application in Visual Studio Code无法在 Visual Studio Code 中调试无服务器应用程序
【发布时间】:2018-01-08 06:49:13
【问题描述】:

我尝试在 VS 代码中调试使用无服务器框架开发的无服务器应用程序。我关注了this 文章。

但是当我尝试调试代码时,我从 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",
            "{}"
        ]

    }
]

请帮我解决这个问题。

【问题讨论】:

  • 面临完全相同的问题。它在控制台工作,但不是通过调试配置。如果您找到解决方案,请告诉我。

标签: node.js visual-studio-code serverless-framework serverless-architecture


【解决方案1】:

我尝试关注the same article,但遇到了同样的错误。添加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
            ]
        }
    ]
}

使用无服务器 ^1.26.1、Node 8.9.4 LTS、VSCode 1.20.1

【讨论】:

  • 工作就像一个魅力。
  • 谢谢!把我的头发拉出来了。
  • 在我的情况下,即使我已经指出 ${workspaceRoot}/node_nodules/serverless/bin/serverless 并且该路径正确解析为实际无服务器模块 VS Code 的 --save-dev 安装不会运行无服务器,导致属性“程序”不存在。但是,将程序更改为 /Users/username/.nvm/versions/node/v8.10.0/bin/serverless 确实有效。
【解决方案2】:

要使用 TypeScript 进行调试,我需要将 outFiles 设置添加到我的编译代码所在的文件夹中。

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

我没有尝试直接调试 JS,但我认为它是这样的。

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

【讨论】:

  • 我已经尝试添加 outFiles 但仍然遇到同样的错误。它与此无关,并且 VS 代码在发生任何其他错误时总是给出此 commen 错误。设置“outDir 或 outFiles”属性可能会有所帮助。
【解决方案3】:

没有一个解决方案对我有用,所以这是我作为资源的修改。此外,多个同事只需将 auto-attach 设置为 on 并使用 invoke local 关键字就可以进行攻击。

下面是一个带有 launch.json 的 sn-p,它最终对我有用。 /w cmets 为清楚起见,我的函数在哪里命名为处理器。

--function 或 -f 服务中要在本地调用的函数的名称。

--path 或 -p json 文件的路径,该文件包含要作为事件传递给调用函数的输入数据。此路径相对于服务的根目录。

--stage 或 -s 您要在其中调用函数的服务阶段。

  • “无服务器”:“^1.30.3”
  • “无服务器插件打字稿”:“^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
          }
      ]
    }
    

【讨论】:

    【解决方案4】:

    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 插件来做到这一点?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      • 2016-09-04
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      相关资源
      最近更新 更多