在 vscode 中调试时,nestjs 文件中的更改未生效

M.Y*_*.Y. 1 node.js nodemon nestjs vscode-debugger

我在 vscode 中有一个 Nestjs 项目,在调试模式下代码中的更改不会生效。然而,断点正常命中,但例如看不到更改的变量值 - 即它们保持为先前的值(更改之前的值)。

我的 launch.json 如下:

{
    "version": "0.2.0",
    "configurations": [
      {
        "type": "node",
        "request": "launch",
        "name": "Debug Nest Framework",
        "runtimeExecutable": "nodemon",
        "runtimeArgs": ["--nolazy", "-r", "ts-node/register", "--config", "nodemon-debug.json"],
        "program": "${workspaceFolder}/src/main.ts",
        "autoAttachChildProcesses": true,
        "restart": true
      }
    ]
  }
Run Code Online (Sandbox Code Playgroud)

并且nodemon-debug.json文件具有以下内容:

{
"watch": ["src"],
"ext": "ts, js",
"ignore": ["src/**/*.spec.ts"]
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是,当我更改代码时,nodemon 确实注册了它并重新启动应用程序,从控制台可以看到:

C:\...\AppData\Roaming\npm\nodemon.cmd --nolazy -r ts-node/register --config nodemon-debug.json .\dist\main.js
[nodemon] 2.0.18
c:\...\AppData\Roaming\npm\node_modules\nodemon\lib\utils\log.js:34
[nodemon] to restart at any time, enter `rs`
c:\...\AppData\Roaming\npm\node_modules\nodemon\lib\utils\log.js:34
[nodemon] watching path(s): src\**\*
c:\...\AppData\Roaming\npm\node_modules\nodemon\lib\utils\log.js:34
[nodemon] watching extensions: ts,js
c:\...\AppData\Roaming\npm\node_modules\nodemon\lib\utils\log.js:34
[nodemon] starting `node --nolazy -r ts-node/register .\dist\main.js`
c:\...\AppData\Roaming\npm\node_modules\nodemon\lib\utils\log.js:34

[WEB] http://localhost:3000
Run Code Online (Sandbox Code Playgroud)

谁能弄清楚为什么更改没有生效?

M.Y*_*.Y. 8

我终于从这个/sf/answers/4432759481/找到了解决方案

{
    "version": "0.2.0",
    "configurations": [
      {
        "type": "node",
        "request": "launch",
        "name": "Debug Nest Framework",
        "runtimeExecutable": "npm",
        "runtimeArgs": [
          "run",
          "start:debug",
          "--",
          "--inspect-brk"
        ],
        "autoAttachChildProcesses": true,
        "restart": true,
        "sourceMaps": true,
        "stopOnEntry": false,
        "console": "integratedTerminal",
      }
    ]
  }
Run Code Online (Sandbox Code Playgroud)

这个解决方案确实非常适合我,并且不需要 vscode 的设置:调试 > Javascript:自动将过滤器附加到“始终”。另外 console:integratedTerminal -选项很方便,因为调试信息直接进入同一个控制台。另外,现在不需要nodemon-debug.json。

Package.json 文件中的脚本命令现在是:

"scripts": {
    ...
    "start:debug": "nest start --debug --watch",
    ...
}
Run Code Online (Sandbox Code Playgroud)

看来这里仍然需要“--watch”才能使代码更改生效。