Отладка Typescript с помощью кода Visual Studio и отдельной папки вывода

#debugging #typescript #visual-studio-code #breakpoints

#отладка #typescript #visual-studio-code #точки останова

Вопрос:

Как скомпилировать код typescript в другую папку, сохраняя при этом возможность отладки кода?

Предположим, я хочу установить точку останова для первого console.log файла in myapp.ts :

 class HelloTS {
    public static main(): number {
        console.log('Hello TS');

        console.log("about to exit now")
        return 0;
    }
}

HelloTS.main();
 

и следующее tsconfig.json :

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

Контрольная точка работает нормально, пока myapp.ts , myapp.js , и myapp.js.map находятся в одной папке.

Однако, когда я создаю отдельную папку для sources ( src/ ) и output ( dist/ ), контрольная точка не работает и также не выдает никаких ошибок.

У меня есть следующая конфигурация, которая успешно компилируется, но не обеспечивает отладку.

.vscode/tasks.json :

 {
    "version": "0.1.0",
    "command": "tsc",
    "isShellCommand": true,
    "args": [
        "-p", ".", 
        "--rootDir", "src/", 
        "--outDir", "dist/"    
    ],
    "showOutput": "silent",
    "echoCommand": true,
    "problemMatcher": "$tsc"
}
 

.vscode/launch.json :

 {
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch",
            "type": "node",
            "request": "launch",
            "program": "${workspaceRoot}/src/myapp.ts",
            "stopOnEntry": false,
            "args": [],
            "cwd": "${workspaceRoot}",
            "preLaunchTask": null,
            "runtimeExecutable": null,
            "runtimeArgs": [
                "--nolazy"
            ],
            "env": {
                "NODE_ENV": "development"
            },
            "console": "internalConsole",
            "sourceMaps": true,
            "outFiles": [
                "**/*.js",
                "**/*.js.map"
            ]
        },
        {
            "name": "Attach",
            "type": "node",
            "request": "attach",
            "port": 5858,
            "address": "localhost",
            "restart": false,
            "sourceMaps": true,
            "outFiles": [],
            "localRoot": "${workspaceRoot}",
            "remoteRoot": null
        },
        {
            "name": "Attach to Process",
            "type": "node",
            "request": "attach",
            "processId": "${command.PickProcess}",
            "port": 5858,
            "sourceMaps": true,
            "outFiles": []
        }
    ]
}
 

Ответ №1:

Я думаю outFiles , что атрибут в вашем launch.json должен быть:

 {
  ...

  "outFiles": [ "${workspaceRoot}/dist/**/*" ]

  ...
},