wake-up-neo.net

Die aktuelle TypeScript-Datei kann nicht in VS Code debuggen, da entsprechendes JavaScript nicht gefunden werden kann

Ich verwende Visual Studio Code Version 1.17 und mein Ziel ist das Debuggen der Datei current TypeScript. Ich habe eine Build-Aufgabe, daher habe ich immer eine entsprechende Javascript-Datei wie diese:

src/folder1/folder2/main.ts
src/folder1/folder2/main.js

Ich habe es mit der folgenden Konfiguration von launch.json versucht: 

{
  "type": "node",
  "request": "launch",
  "name": "Current File",
  "program": "${file}",
  "console": "integratedTerminal",
  "outFiles": [
    "${workspaceFolder}/${fileDirname}**/*.js"
  ]
}

Ich erhalte jedoch die Fehlermeldung: Cannot launch program '--full-path-to-project--/src/folder1/folder2/main.ts' because corresponding JavaScript cannot be found.

Die entsprechende JavaScript-Datei existiert jedoch!

tsconfig.json: 

{
"compileOnSave": true,
"compilerOptions": {
    "target": "es6",
    "lib": [
        "es2017",
        "dom"
    ],
    "module": "commonjs",
    "watch": true,
    "moduleResolution": "node",
    "sourceMap": true
    // "types": []
},
"include": [
    "src",
    "test"
],
"exclude": [
    "node_modules",
    "typings"
]}
16
DauleDK

Die Konfiguration für Ihre outFiles zeigt auf das falsche Verzeichnis.

Ersetzen Sie Ihre launch.json config damit:

{
  "type": "node",
  "request": "launch",
  "name": "Current File",
  "program": "${file}",
  "console": "integratedTerminal",
  "outFiles": ["${fileDirname}/*.js"]
}

Aus der vscode launch.json-Variablenreferenz :

${fileDirName} der Verzeichnisname der aktuell geöffneten Datei

sollte das Verzeichnis sein, das Sie benötigen. 

Beachten Sie, dass Sie auch "outFiles": ["${fileDirname}/**/*.js"] verwenden können, um Unterverzeichnisse einzuschließen.

Die von Ihnen verwendete Konfiguration fügt das folgende Verzeichnis hinzu:

"${workspaceFolder}/${fileDirname}**/*.js"

Was übersetzt so etwas wie:

"/path/to/root/path/to/root/src/folder1/folder2/**/*.js"

d. h. der Pfad zur Wurzel ist zweimal dort, was ihn zu einem ungültigen Pfad macht.

Wenn sich Ihre .js-Dateien in einer anderen outDir befinden, verwenden Sie einfach den Pfad zu diesem Verzeichnis. Den Rest erledigt TypeScript sourceMaps.

Wenn Sie beispielsweise Ihre .js-Dateien in einem dist-Verzeichnis ablegen:

"outFiles": ["${workspaceFolder}/dist/**/*.js"]
4
lucascaro

Das Problem liegt möglicherweise an Ihren Kartendateien und nicht an der Konfiguration. 

Bevor Sie etwas anderes ausprobieren, möchten Sie sicherstellen, dass Ihre in Ihrer Startkonfiguration verwendeten Pfade korrekt sind.

Sie können dies tun, indem Sie die Pfade temporär durch absolute Pfade in Ihrem System ersetzen, um zu sehen, ob es funktioniert.

Wenn es nicht funktioniert, sollten Sie:

Überprüfen Sie Ihre tsconfig und stellen Sie sicher, dass für mapRoot unter compilerOptions nichts festgelegt ist. Dies ist, was die offizielle Dokumentation dazu sagt:

Gibt den Ort an, an dem der Debugger Map-Dateien stattdessen suchen soll von generierten Standorten. Verwenden Sie dieses Flag, wenn die .map-Dateien .__ sein sollen. zur Laufzeit an einem anderen Ort als die JS-Dateien. Das Die angegebene Position wird in die SourceMap eingebettet, um die .__ zu leiten. Debugger, in dem sich die Map-Dateien befinden.

Sie können mehr darüber lesen hier

In den meisten Fällen möchten Sie nicht wirklich irgendetwas einstellen.

Stellen Sie auch sicher, dass

"sourceMap": true` 

wird in compilerOptions in tsconfig.json festgelegt und Map-Dateien werden generiert.

10
Aakash Malhotra

Falls jemand anderes darauf stößt: Wenn Sie Ihr Projekt mit Webpack erstellen, müssen Sie die Einstellung devtool verwenden, die VS-Code-kompatible Quellkarten generiert. Durch Versuch und Irrtum funktionieren cheap-module-source-map und source-map gut. Am Ende fügte ich dies meinem webpack.config.js hinzu:

devtool: env.production ? 'source-map' : 'cheap-module-source-map'
2
starkos

Das hat in meinem Fall funktioniert:

Gehen Sie in Ihren gulpfile.js und suchen Sie die Zeile mit sourcemaps.write(). Ändern Sie diese Zeile in

        .pipe(sourcemaps.write('.', { includeContent: false, sourceRoot: '../lib' }))

Erstellen Sie Ihr Projekt neu und versuchen Sie, den Debugger erneut auszuführen. Credit geht auf GitHub an Roblourens. Er verlinkt diese Seite, die hilfreich war.

0
mneumann

In meinem Fall hat der Täter das Arbeitsverzeichnis auf ein anderes Verzeichnis als das der Datei in launch.json Eingestellt:

"cwd": "${workspaceFolder}/dist"

Vielleicht könnte es ein Fehler in VSCode sein.

0
mrmashal