Das Debuggen von TypeScript in VS Code tritt stattdessen in JavaScript ein
Ich versuche, meine TypeScript-NodeJs-Anwendung in VS Code mit der folgenden launch.json zu debuggen:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"skipFiles": [
"<node_internals>/**"
],
"program": "${workspaceFolder}/apps/file-server-app/app.ts",
"outFiles": [
"${workspaceFolder}/build/**/*.js"
],
"runtimeArgs": [
"--require",
"ts-node/register"
]
}
]
}
Die Anwendung startet einwandfrei und alles funktioniert wie es sollte, außer den Haltepunkten. Anstatt an der tatsächlichen Zeile zu stoppen, an der ich den Haltepunkt im Typescript-Code gesetzt habe, bricht es an der Zeile im kompilerten Javascript-Äquivalent ab.
Dinge, die ich ausprobiert habe:
- Aktivieren der Quellkarten und Sicherstellen, dass sie korrekt erzeugt werden
- Aktivieren der Inline-Quellkarten und sicherstellen, dass sie korrekt erstellt werden
- Alles auf einem neuen Setup neu installieren
Zusätzliche Informationen:
VSCode Version: 1.46.1
TypeScript Version: 3.8.3
Antwort #1
Es stellt sich heraus, dass dies beabsichtigt im Design von VS Code ist.
Um es zu beheben, können Sie entweder:
- Setze
outFilesin deiner launch.json auf ein leeres Array, damit Sourcemaps nicht entdeckt werden und die Pfadumleitung nicht passiert. - oder ts-node fallen lassen und kompilierte Dateien debuggen, oder ts-node verwenden, ohne sie manuell zu kompilieren.
Siehe dieses GitHub-Problem für weitere Details: https://github.com/microsoft/vscode/issues/101927
Antwort #2
Anscheinend führt das Aktivieren der Einstellung allowjs in der tsconfig.json und das Kompilieren von TypeScript mit dieser Einstellung dazu, dass der VS Code-Debugger in die JavaScript-Dateien statt in die TypeScript-Dateien einsteigt. Für den Moment, selbst wenn dies bedeutet, dass Sie Ihre JavaScript-Dateien beim Kompilieren von TypeScript nicht auf Fehler überprüfen können, besteht die vorläufige Lösung darin, die Einstellung allowjs zu deaktivieren, indem Sie sie auf false setzen, wie folgt:
"compilerOptions": {
//"allowJs": true
}
