使用VS Code、TypeScript和Node.js的断点位置不正确

Incorrect breakpoint location using VS Code, TypeScript and Node.js

本文关键字:js 断点 位置 不正确 Node VS Code TypeScript 使用      更新时间:2023-09-26

尝试在VS代码中使用TypeScript调试节点应用程序。

问题是调试器没有在源代码中的正确位置停止。

应用

class Foo 
{
    doSomething(){
        console.log("TEST");
    }   
}
var foo = new Foo()
foo.doSomething();

tsconfig.json

{
    "compilerOptions": {
        "sourceMap": true,
        "target": "ES5",
        "module": "commonjs"
    }
}

launch.json

"configurations": [
    {
        // Name of configuration; appears in the launch configuration drop down menu.
        "name": "Launch app.js",
        // Type of configuration.
        "type": "node",
        // Workspace relative or absolute path to the program.
        "program": "app.ts",
        // Automatically stop program after launch.
        "stopOnEntry": false,
        // Command line arguments passed to the program.
        "args": [],
        // Workspace relative or absolute path to the working directory of the program being debugged. Default is the current workspace.
        "cwd": ".",
        // Workspace relative or absolute path to the runtime executable to be used. Default is the runtime executable on the PATH.
        "runtimeExecutable": null,
        // Optional arguments passed to the runtime executable.
        "runtimeArgs": ["--nolazy"],
        // Environment variables passed to the program.
        "env": {
            "NODE_ENV": "development"
        },
        // Use JavaScript source maps (if they exist).
        "sourceMaps": true,
        // If JavaScript source maps are enabled, the generated code is expected in this directory.
        "outDir": null
    },

tasks.json

// A task runner that calls the Typescript compiler (tsc) and
// compiles based on a tsconfig.json file that is present in
// the root of the folder open in VSCode
{
    "version": "0.1.0",
    // The command is tsc. Assumes that tsc has been installed using npm install -g typescript
    "command": "tsc",
    // The command is a shell script
    "isShellCommand": true,
    // Show the output window only if unrecognized errors occur.
    "showOutput": "silent",
    // Tell the tsc compiler to use the tsconfig.json from the open folder.
    "args": ["-p", "."],
    // use the standard tsc problem matcher to find compile problems
    // in the output.
    "problemMatcher": "$tsc"
}

问题是,如果我在"console.log("test");"行设置断点,调试器会跳下两行并错过我的断点。

知道为什么会发生这种事吗。据我所知,应该可以调试用typescript编写的节点应用程序。

我怀疑原因是app.ts在某个时刻发生更改时,您的app.jsapp.map.js没有更新。

每次运行调试器之前都应该运行tsc任务,以确保生成的JavaScript文件反映您在TypeScript文件中所做的更改。

这个(非常常见)用例的简单项目模板可以在https://github.com/jyuhuan/node-ts.它定义了一个tsc任务,用于监视TS文件的任何更改,使生成的JS文件始终保持最新。