Ce face sourceMap
Codul care rulează este JavaScript-ul generat, nu sursa TypeScript. Fără ajutor, erorile și depanatorul arată rânduri din fișierul .js. Cu sourceMap, tsc scrie lângă fiecare .js o hartă .js.map și adaugă la final rândul //# sourceMappingURL=....
Browserele și editoarele (VS Code) folosesc hărțile automat. Node.js le folosește cu node --enable-source-maps: urmele erorilor (stack trace) arată atunci fișierul și rândul din sursa .ts. Implicit: false. tsc --init din 5.9 o pornește.
Parametri
| Parametru | Descriere |
|---|---|
true |
Se generează .js.map pentru fiecare .js. |
false |
Valoarea implicită. |
Exemple
Exemplul 1: O eroare, cu și fără hartă
Fără --enable-source-maps, Node.js arată rândul 3 din dist/index.js. Cu el, arată rândul 2 din src/index.ts, unde este de fapt throw. Harta este JSON: sources spune fișierul sursă, iar mappings codifică legătura dintre rânduri.
// tsconfig.json
{
"compilerOptions": {
"module": "nodenext",
"target": "es2022",
"sourceMap": true,
"outDir": "dist"
}
}
// src/index.ts
function imparte(a: number, b: number): number {
if (b === 0) throw new Error("Împărțire la zero");
return a / b;
}
console.log(imparte(10, 2));
console.log(imparte(1, 0));
Rezultat (tsc 5.9)
$ npx tsc && find dist -type f | sort
dist/index.js
dist/index.js.map
$ node dist/index.js 2>&1 | grep -m1 'at imparte'
at imparte (file:///proiect/dist/index.js:3:15)
$ node --enable-source-maps dist/index.js 2>&1 | grep -m1 'at imparte'
at imparte (/proiect/src/index.ts:2:22)
$ tail -1 dist/index.js
//# sourceMappingURL=index.js.map
$ cat dist/index.js.map
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS,OAAO,CAAC,CAAS,EAAE,CAAS;IACnC,IAAI,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC"}
Greșeli frecvente
- Să pornești
sourceMapșiinlineSourceMapîmpreună: tsc dă eroarea TS5053. - Să publici hărțile pe un site public fără să vrei. Ele dezvăluie structura surselor; cu
inlineSources, chiar codul sursă.
Comenzi înrudite
inlineSourceMap: Pune harta sursă direct în fișierul .js (base64), nu într-un .js.map separat; inlineSources include și codul .ts.sourceRoot: Schimbă locul unde depanatorul caută sursele .ts (sourceRoot) și hărțile .map (mapRoot), dacă nu sunt lângă fișierele .js.declarationMap: Generează hărți .d.ts.map, ca „Go to Definition” din editor să ducă la sursa .ts, nu la fișierul .d.ts.outDir: Directorul în care tsc scrie fișierele generate, cu aceeași structură de subdirectoare ca sursele.