Debugging Complex TS Projects in VSCode
launch.json
Config File
This page assumes a build config based on the one in Publishing Type Definitions with a src
and a dist
folder.
We can use npm link
to link project1
to project2
and then we can add the dist folders from both projects to outFiles
so that they are picked up by the vscode debugger.
We also want to make sure that sourceMaps
is set to true so that the debugger picks up the source maps in the dist folders and maps them onto the corresponding src
folders.
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceFolder}/project1/dist/index.js",
"preLaunchTask": "Build All",
"outFiles": [
"${workspaceFolder}/project1/dist/**/*.js",
"${workspaceFolder}/project2/dist/**/*.js"
],
"sourceMaps": true,
"sourceMapRenames": true
}
]
}
The launch definition can fire off a pre-launch task so we can use that to always ensure that the transpiled js code is up to date before we launch it. The below configuration defines the builds and dependencies between them
tasks.json
Configuration
This file contains build tasks that the launch.json file can depend on before launching.
{
"version": "2.0.0",
"tasks": [
{
"type": "typescript",
"tsconfig": "projecta/tsconfig.json",
"problemMatcher": [
"$tsc"
],
"group": "build",
"label": "tsc: build - projecta/tsconfig.json",
"dependsOn":["tsc: build - projectb/tsconfig.json"]
},
{
"type": "typescript",
"tsconfig": "projectb/tsconfig.json",
"problemMatcher": [
"$tsc"
],
"group": "build",
"label": "tsc: build - projectb/tsconfig.json"
},
{
"label":"Build All",
"dependsOn":[
"tsc: build - projecta/tsconfig.json",
"tsc: build - projectb/tsconfig.json"
]
}
]
}
We can define two typescript build operations - linking them together with dependencies and we can also define a Build All
job which is just a dummy job that doesn't do anything but requires the ts builds to complete before it can be considered complete itself.