使用VSCode调试npm脚本的正确方式是什么?

49

我有一个需要调试的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 毫秒后超时 - (原因:无法连接到目标:connect ECONNREFUSED 127.0.0.1:9229)。

我不确定自己漏掉了哪个部分。

根据重复的标签进行编辑

我看到了另一个关于通过 vscode 调试 npm 脚本的问题,但是其他问题和答案的细节没有这个问题所选择的答案给出的详细和具体。如果有人搜索我遇到的特定的 vscode 错误消息或我拥有的配置类型,他们就不一定会得到这个问题选定答案所提供的详细答案。


1
可能是如何在VSCode中使用npm运行脚本进行调试?的重复问题。 - Jakub Synowiec
在重复的问题上达成了一致,我建议在这篇帖子上采纳这个答案:https://dev59.com/N1sW5IYBdhLWcg3wi36j#68959015。现在VScode已经内置支持调试npm脚本。 - JohnnyFun
1个回答

52

你不应该尝试调试npm脚本,因为你真正想要的是将调试器附加到使用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
}

但是您还需要更改您的脚本命令(指定调试端口)

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

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

enter image description here

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


5
弃用警告:node --debugnode --debug-brk 已无效。请使用 node --inspectnode --inspect-brk。新版本中可与新的 --inspect-brk 一起使用。 - Jay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接