vscode:使用nodemon

时间:2017-04-04 20:49:35

标签: node.js typescript visual-studio-code breakpoints nodemon

VSCode版本:1.10.2 操作系统版本:Windows 7 Profesionnal,SP1 节点版本:6.10.0

大家好。

我正在尝试用visual studio代码调试服务器端的typescript代码(或javascript代码),当使用nodemon启动它时。我在launch.json中添加了一个新配置,如下所示:

{
      "type": "node",
      "request": "launch",
      "name": "Launch server with Nodemon",
      "runtimeExecutable": "nodemon",
      "runtimeArgs": [
        "--debug=5858"
      ],
      "program": "${workspaceRoot}/src/server.ts",
      "restart": true,
      "port": 5858,
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen",
      "outFiles": ["${workspaceRoot}/build/**/*.js"]
    }

我在运行tsc的vscode中有一个正确构建javascript文件的任务。这是我当前的任务配置:

{
  // See https://go.microsoft.com/fwlink/?LinkId=733558
  // for the documentation about the tasks.json format
  "version": "0.1.0",
  "command": "tsc",
  "isShellCommand": true,
  "args": ["-p", "."],
  "showOutput": "silent",
  "problemMatcher": "$tsc"
}

当我更改打字稿文件时,会按预期生成javascript文件。 并且当生成javascript文件时,nodejs服务器正在按预期重新启动。

但是我无法打破任何断点(在打字稿文件或javascript文件上)。

如果这是一个问题或者我有什么遗失的话,你能告诉我吗?

感谢您的帮助

3 个答案:

答案 0 :(得分:3)

看起来vscode中存在问题(问题由github [here] [1]打开)。但目前,解决方法是将配置中的协议(launch.json)设置为" inspector"。使用此选项,现在可以正确地到达断点。

此外,更改" runtimeArgs"中的" - debug = 5858" 选项" - inspect = 5858"

{
  "type": "node",
  "request": "launch",
  "name": "Launch server with Nodemon",
  "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/nodemon",
  "runtimeArgs": [
    "--inspect=5858"
  ],
  "program": "${workspaceRoot}/src/server.ts",
  "restart": true,
  "port": 5858,
  "protocol": "inspector",
  "console": "integratedTerminal",
  "internalConsoleOptions": "neverOpen",
  "outFiles": ["${workspaceRoot}/build/**/*.js"],
  "sourceMaps": true
},

此外,如果您有闪烁的消息错误告诉您:

  

无法连接到运行时进程,10000毫秒后超时 - (原因:无法连接到目标:连接ECONNREFUSED 127.0.0.1:5858)

这意味着您的程序太短,并且调试器没有足够的时间来断开断点。要解决此问题,请向选项" runtimeArgs":" - debug-brk" 添加第二个运行时参数,并设置" stopOnEntry& #34; 选项 true

最终配置应如下所示:

{
  "type": "node",
  "request": "launch",
  "name": "Launch server with Nodemon",
  "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/nodemon",
  "runtimeArgs": [
    "--inspect=5858",
    "--debug-brk"
  ],
  "stopOnEntry": true,
  "program": "${workspaceRoot}/src/server.ts",
  "restart": true,
  "port": 5858,
  "protocol": "inspector",
  "console": "integratedTerminal",
  "internalConsoleOptions": "neverOpen",
  "outFiles": ["${workspaceRoot}/build/**/*.js"],
  "sourceMaps": true
}

它应该在您的条目javascript文件的第一行中断。然后你可以按F5,它将到达你自己的断点。

如果您不想在每次运行程序时按F5,则可以将主条目代码嵌入至少1000毫秒超时的setTimeOut函数中。

所有这些选项都会给你足够的时间来破解你的断点。

://github.com/Microsoft/vscode/issues/23900" GitHub Issue"

答案 1 :(得分:1)

@ManfredSteiner

我最近也遇到过这个问题。我想你已经尝试在你的输入文件(main.ts)的开头打破。我听说我们有这个错误消息,因为程序太短并且在调试器可以成功附加之前终止。你有两个解决方案:

  • 首先,将您的输入代码放入至少1000毫秒的setTimeOut函数中。它应该给调试器足够的时间来附加到你的程序。

  • 第二个解决方案是将您的launch.json设置为选项:" stopOnEntry"到"真"并将runtimeArgs选项设置为[" - inspect = 5858"," - debug-brk"]。

像这样: "configurations": [ { "type": "node", "request": "launch", "name": "nodemon", "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/nodemon", "runtimeArgs": [ "--inspect=5858", "--debug-brk" ], "stopOnEntry": true, "program": "${workspaceRoot}/src/server/main.ts", "restart": true, "port": 5858, "protocol": "inspector", "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", "outFiles": ["${workspaceRoot}/dist/**/*.js"], "sourceMaps": true } ]

它将在main.js的第一行中断,然后按F5,您将能够在main.ts中断开自己的断点。如果你不想要,每次运行你的程序时,按F5直到它到达你的断点,我建议你使用第一个解决方案(将你的main.ts条目代码嵌入setTimeOut函数中至少1000毫秒)。我希望它会对你有所帮助

答案 2 :(得分:0)

@Philoufelin,谢谢你的努力。我现在按照你的建议对它们进行了测试。

...已添加到文件 tsconfig.json

"outDir": "./dist"

来自文件 launch.json

的快照
"configurations": [
   {  
     "type": "node",
     "request": "launch",
     "name": "nodemon",
     "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/nodemon",
     "runtimeArgs": [ "--inspect=5858" ],
     "program": "${workspaceRoot}/src/server/main.ts",
     "restart": true,
     "port": 5858,
     "protocol": "inspector",
     "console": "integratedTerminal",
     "internalConsoleOptions": "neverOpen",
     "outFiles": ["${workspaceRoot}/dist/**/*.js"],
     "sourceMaps": true
   }
 ]

但它不起作用。 10秒后,vscode闪烁消息......
无法连接到运行时进程,10000毫秒后超时 - (原因:无法连接到目标:连接ECONNREFUSED 127.0.0.1:5858)

nodemon 还会在开始时打印出以下行:
chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:5858/a0f8f52a-47ec-4ddb-9f03-4eb1c97ef8aa

我在chrome中尝试了这个链接,附件工作,但忽略了调试器语句或断点。

我观察到使用vscode进行正常调试的另一个区别。正常调试在DEBUG CONSOLE选项卡中启动。启动nodemon在TERMINAL选项卡中启动。