web-dev-qa-db-ja.com

Visual Studio Codeでサーバーレスアプリケーションをデバッグできない

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",
            "{}"
        ]

    }
]

この問題の修正を手伝ってください。

12
Wella

同じ記事 をフォローしようとすると、同じエラーが発生しました。 outFilesを追加しても効果はありませんでしたが、didエラーメッセージが次のように変わります。

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

22
Mike Patrick

TypeScriptで動作するようにデバッグするには、コンパイル済みコードが格納されるフォルダーにoutFilesセットを追加する必要がありました。

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

私はまっすぐなJSをデバッグしようとしませんでしたが、これはこのようなものだと思います。

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

解決策はどれも私にとってはうまくいかなかったので、これがリソースとしての私の変更です。また、自動接続をオンに切り替え、invoke localキーワードを使用するだけで、複数の同僚が攻撃することができました。

以下は、最終的に私のために働いたlaunch.jsonをフィーチャーしたスニペットです。/wは、私の関数の名前がProcessorであることを明確にするためにコメントしています。

--functionまたは-fローカルで呼び出すサービス内の関数の名前。

--pathまたは-pイベントとして呼び出された関数に渡される入力データを保持するjsonファイルへのパス。このパスは、サービスのルートディレクトリからの相対パスです。

--stageまたは-s関数を呼び出すサービス内のステージ。

  • 「サーバーレス」:「^ 1.30.3」
  • "serverless-plugin-TypeScript": "^ 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
          }
      ]
    }
    
0
DisplayName