首页 > 解决方案 > vs code:调试在nodejs中运行的打字稿,同时指定源根

问题描述

我想用 VSCode 调试我的打字稿代码(在 NodeJS 中运行)。以下代码是我的起点,并且工作得很好。

打字稿代码:

//src/index.ts
console.log('line 1');
console.log('line 2');

编译器设置:

//tsconfig.json
{
    "compilerOptions": {
        "module": "commonjs",
        "sourceMap": true
    },
    "exclude": [
        "node_modules"
    ]
}

和启动配置

//.vscode/launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Launch Program",
            "skipFiles": [
                "<node_internals>/**"
            ],
            "program": "${workspaceFolder}/src/index.js"
        }
    ]
}

在上面的设置中,我可以在打字稿代码中添加断点,然后开始调试。

所有打字稿源代码都在一个名为src/. 我想通过添加以下配置选项在编译器设置中指定它:

"compilerOptions": {
    //...
    "sourceRoot": "src"

它仍然可以正常编译,并且在执行时会打印“第 1 行”、“第 2 行”。

但是,断点不再起作用。我查看了生成的源映射,它们指定了路径“sourceRoot”:“src”。我想这会破坏源映射查找。由于原始源与生成的输出位于同一文件夹中。如何在编译器中正确配置它?

标签: node.jstypescriptdebuggingvisual-studio-code

解决方案


我发现在 vscode 中调试 ts 的最简单方法是使用ts-node

然后我在我的启动脚本中使用 ts-node

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "ts node inspector",
      "type": "node",
      "request": "launch",
      "args": ["${workspaceRoot}/src/server.ts"],
      "runtimeArgs": ["-r", "ts-node/register"],
      "cwd": "${workspaceRoot}",
      "protocol": "inspector",
      "internalConsoleOptions": "openOnSessionStart",
      "env": {
        "TS_NODE_IGNORE": "false"
      }
    }
  ]
}

推荐阅读