如何在VSCode中调试NodeMon项目

时间:2018-11-17 14:48:55

标签: node.js debugging visual-studio-code nodemon vscode-debugger

我有一个NodeJs项目,并使用nodemon运行它,
我希望以调试模式运行它以完成开发任务,但我无法这样做。

我发现我需要在.vscode文件夹下的launch.json文件中添加正确的配置,
我有一个StatefulWidget文件,它是主应用程序文件。
应用程序可以在app.jsnode version 4.6.2上运行。
通常情况下,我使用Port 8080命令运行该应用。

以下是我的launch.json文件-

npm run dev

package.json如下-

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "MyApp",
            "program": "${workspaceFolder}/app.js",
            "runtimeVersion": "4.6.2",
            "protocol": "legacy",
            "port": 8080
            //"runtimeExecutable": "/home/user/.nvm/versions/node/v4.6.2/bin/node"
        },
        {
            "type": "node",
            "request": "launch",
            "name": "nodemon",
            "runtimeExecutable": "nodemon",
            "program": "${workspaceRoot}/app.js",
            "restart": true,
            "console": "integratedTerminal",
            "internalConsoleOptions": "neverOpen",
            "runtimeVersion": "4.6.2",
            "protocol": "legacy",
            "port": 8080
        },
        {
            "type": "node",
            "request": "launch",
            "name": "DEBUG",
            "runtimeExecutable": "nodemon",
            "program": "${workspaceFolder}/app.js",
            "restart": true,
            "console": "integratedTerminal",
            "internalConsoleOptions": "neverOpen",
            "runtimeVersion": "4.6.2",
            "protocol": "legacy",
            "port": 8080
        }
    ]
}

当我运行DEBUG和nodemon配置时,该应用程序启动,
但是代码并没有在我放置在app.js文件上的断点处暂停。

参考链接-
1. https://github.com/Microsoft/vscode-recipes/tree/master/nodemon
2. https://github.com/bdspen/nodemon_vscode
3. Can Visual Studio Code be configured to launch with nodemon
4. Cannot debug in VSCode by attaching to Chrome
5. https://code.visualstudio.com/docs/editor/debugging

package.json中需要进行哪些更改,或者Launch配置中需要进行任何更正-launch.json,这将有助于我为用例调试VSCode中的应用程序?

5 个答案:

答案 0 :(得分:2)

将package.json更改为

"scripts": {
    "dev": "node app.js",
    "debug": "nodemon --inspect app.js"
}
  

-检查版本> = 6.3。 --legacy或--auto for older versions

然后将launch.json发送到:

"version": "0.2.0",
"configurations": [
    {
        "type": "node",
        "request": "attach",
        "name": "Node: Nodemon",
        "processId": "${command:PickProcess}",
        "restart": true,
        "protocol": "inspector"
    }
]

重启标志是这里的关键。

通过新的调试脚本启动应用

  

npm运行调试

  • 在“调试”视图中,选择节点:Nodemon 配置,然后按播放 或F5
  • 选择上面开始的过程

查看更多:vscode nodemon recipe

答案 1 :(得分:2)

您可以启动并附加带有F5的nodemon,但是需要更多的设置。

我们必须首先通过VS Code任务预启动Nodemon,然后再附加。

我正在使用远程调试器进行附加,因为它不需要额外的单击来选择要附加的流程,并且VS Code流程选择器当前是broken in WSL2,这是我的主要开发环境。

tasks.json(来自this answer):

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "npm dev",
      "type": "npm",
      "script": "dev",
      "isBackground": true,

      // This task is run before some debug tasks.
      // Problem is, it's a watch script, and since it never exits, VSCode
      // complains. All this is needed so VSCode just lets it run.
      "problemMatcher": [
        {
          "pattern": [
            {
              "regexp": ".",
              "file": 1,
              "location": 2,
              "message": 3
            }
          ],
          "background": {
            "activeOnStart": true,
            "beginsPattern": ".",
            "endsPattern": "."
          }
        }
      ]
    }
  ]
}

launch.json:

{
  "type": "node",
  "request": "attach",
  "name": "Launch & Attach",
  "restart": true,
  "localRoot": "${workspaceRoot}",
  "remoteRoot": "${workspaceRoot}",
  "preLaunchTask": "npm dev"
}

在npm开发脚本中(对于节点> = 6.9):

nodemon --watch src -e js --exec node --inspect .

注意-如果您的过程开始时间超过10秒,则此方法将不起作用。 在这种情况下,您必须弄清楚在启动前任务完成后如何向VS Code发出信号。这可能可以通过使用beginPattern / endPattern正则表达式来实现,尽管我还没有尝试过。

答案 2 :(得分:1)

在vscode配置中,您可以设置runtimeExecutable来运行给定的程序。设置restart:true,以便vs代码调试器可以重新启动该过程。

这是一个示例配置:

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node", 
            "request": "launch",
            "name": "nodemon",
            "runtimeExecutable": "nodemon",
            "program": "${workspaceFolder}/bin/www",
            "restart": true,
            "console": "integratedTerminal",
            "internalConsoleOptions": "neverOpen",
            "env": {
                "debug": "app:*",
            }
        }
    ]
}

比将调试器附加到正在运行的节点进程要容易。保持类型

答案 3 :(得分:0)

nodemon监听文件更改,并通过另一个过程

重新启动应用程序

因此您的配置是正确的,但是调试器永远不会“看到”断点。

使用nodemon运行调试模式毫无意义。

这是您可能要在VScode上请求的功能(更改代码后自动重新启动)

答案 4 :(得分:0)

我遇到了与Dockerized nodemon进程相关的类似问题。我在will create a Spring Test Context中找到了解决方案。我可以通过更改以下三项使其工作:

  1. 在启动服务的npm脚本中添加了--inspect=0.0.0.0(在我的情况下,命名为debug
  "scripts": {
    "debug": "nodemon -w lib -w server.js --inspect=0.0.0.0 server.js"
  }
  1. 确保在Docker容器中打开了端口9229(或您要使用的任何调试端口)。我正在使用docker-compose,所以它是在相关的yaml中定义的:
ports:
  - "8080:8080"
  - "9229:9229"
  1. 在VS Code中为launch.json添加以下配置:
    "configurations": [
        {
            "name": "Attach to Node in Docker",
            "type": "node",
            "address": "localhost",
            "port": 9229,
            "request": "attach",
            "restart": true
        }
    ]

"restart": true选项允许调试器在监视文件更改后nodemon重新编译内容时自动重新附加。