使用vscode调试npm脚本的正确方法是什么?

时间:2017-04-04 14:31:57

标签: node.js npm visual-studio-code

我有一个我正在尝试调试的npm脚本。我使用vscode所以我想我会创建一个调试配置并使用调试器逐步完成它。

我的npm脚本看起来是:

"scripts": {
    ...
    "dev": "node tasks/runner.js",
}

所以我创建了以下调试配置:

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Launch Program",
            "runtimeExecutable": "npm",
            "cwd": "${workspaceRoot}",
            "runtimeArgs": [
                "run", "dev"
            ],
            "port": 5858,
            "stopOnEntry": true
        }
    ]
}

当我启动它时脚本运行,但vscode永远无法连接,我收到错误:

  

无法通过'legacy'协议连接到运行时;考虑使用'inspector'协议(10000毫秒后超时)。

我尝试添加检查器协议:

       {
            "type": "node",
            "request": "attach",
            "name": "Attach (Inspector Protocol)",
            "port": 9229,
            "protocol": "inspector"
       }

通过以下方式运行npm脚本:

npm run dev --inspect

这次我收到了错误:

  

确保使用--inspect启动Node。无法连接到运行时进程,10000毫秒后超时 - (原因:无法连接到目标:连接ECONNREFUSED 127.0.0.1:9229)。

我不确定我错过了哪一部分。

每个重复标记的编辑

我看到另一个问题:通过vscode调试npm脚本,但其他问题和答案中的详细信息并不详细和具体。如果有人正在搜索我遇到的特定vscode错误消息或我遇到的配置类型,他们不一定会获得该问题所选答案给出的级别答案详细信息。

1 个答案:

答案 0 :(得分:20)

您不应该尝试调试npm script,因为您真正想要的是将调试器附加到使用npm run命令启动的脚本(此处NPM仅用作任务运行器)。

{
  "version": "0.2.0",
  "configurations": [
      {
        "type": "node",
        "request": "launch",
        "name": "Launch Program",
        "program": "${workspaceRoot}/tasks/runner.js"
      }
  ]
}

如果您真的想使用npm脚本运行它,那么您可以使用以下配置:

{
  "type": "node",
  "request": "launch",
  "name": "Launch via NPM",
  "runtimeExecutable": "npm",
  "windows": {
    "runtimeExecutable": "npm.cmd"
  },
  "runtimeArgs": [
    "run-script",
    "dev"
  ],
  "port": 5858
}

但您还需要change脚本命令(指定调试端口)

  "scripts": {
    "dev": "node --nolazy --debug-brk=5858 tasks/runner.js"
  },

只需单击齿轮图标并选择一个,即可浏览各种调试配置。

enter image description here

有关Node.js调试的更多信息,请参阅VS Code documentation