首页 > 解决方案 > 如何在 VS Code 中调试 Amplify JavaScript 函数

问题描述

如何在 Windows 10 上的 VS Code 上调试 Amplify JavaScript 函数?

这个问题出现在 github 下如何在调用期间使用 Visual Studio 代码调试放大功能?,但它已经关闭并且很旧。例如,amplify invoke function不推荐使用amplify mock function.

我试过这个launch.config

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch Create Reort",
      "type": "node",
      "request": "launch",
      "program": "${env:APPDATA}/npm/node_modules/@aws-amplify/cli/bin/amplify",
      "args": [
        "mock",
        "function",
        "sayhello",
        "--event",
        "src/event.json",
        "--timeout",
        "0"
      ],
      "console": "integratedTerminal"
    }
  ]
}

它将记录输出,但不会在正在执行的函数内遇到任何断点:

示例输出

设置步骤:

  1. 安装放大 cli

    npm install -g @aws-amplify/cli
    
  2. 初始化放大。选择带有任何框架的 JavaScript。

    amplify init
    # Choose your default editor:                   Visual Studio Code
    # Choose the type of app that you're building:  javascript  
    # What javascript framework are you using:      none
    
  3. 添加功能

    amplify add function SayHello
    # Choose the runtime that you want to use:            NodeJS
    # Choose the function template that you want to use:  Hello World
    

标签: visual-studio-codewindows-10aws-amplifyvscode-debuggeraws-amplify-cli

解决方案


这是一个有点hacky的解决方法。

据我所知,对于单次执行(运行时环境中的特殊调味料、事件处理和自动可伸缩性),lambda 并没有那么多魔力。Amplify CLI 传入event对象event.json并调用定义为处理程序的函数。你也可以在 vanilla node js 中做到这一点。

创建一个类似的文件debug.js- 你可以把它放在任何你想要的地方,但我的在.vscode目录中

const { handler } = require("../amplify/backend/function/sayHello/src")
const event = require("../amplify/backend/function/sayHello/src/event.json")

// invoke
const response = handler(event)

console.log(response )

然后你可以像这样使用普通的节点 js 调试启动配置:

{
  "name": "Debug Function",
  "program": "${workspaceFolder}/.vscode/debug.js",
  "request": "launch",
  "skipFiles": ["<node_internals>/**"],
  "type": "pwa-node"
}

一些更友好/开箱即用的东西会很好,但这至少允许在没有太多额外工作的情况下逐步调试。


推荐阅读