Ce face rootDir
Când tsc scrie fișierele în outDir, păstrează structura de directoare a surselor, pornind de la rootDir. Cu rootDir: "src", src/util/calcul.ts devine dist/util/calcul.js. Cu rootDir: ".", devine dist/src/util/calcul.js.
Fără rootDir, tsc o calculează: cel mai lung director comun al tuturor fișierelor sursă (fără fișierele .d.ts). Dacă adaugi mai târziu un fișier în afara lui src, structura din dist se schimbă pe neașteptate. Scrisă explicit, rootDir oprește asta: un fișier sursă din afara ei dă eroarea TS6059.
rootDir nu alege ce fișiere intră în compilare (pentru asta sunt include, files și importurile). Doar verifică și stabilește structura ieșirii.
Parametri
| Parametru | Descriere |
|---|---|
"cale" |
Directorul rădăcină al surselor, relativ la tsconfig.json. Implicit: calculat din fișierele de intrare. |
Exemple
Exemplul 1: Structura din dist
Fără rootDir, singurul director comun este src, deci fișierele ajung direct în dist. Cu --rootDir ., apare și directorul src în dist.
// tsconfig.json
{
"compilerOptions": {
"outDir": "dist"
}
}
// src/index.ts
import { cuTva } from "./util/calcul";
console.log(cuTva(100));
// src/util/calcul.ts
export function cuTva(pret: number): number {
return Math.round(pret * 1.19 * 100) / 100;
}
Rezultat (tsc 5.9)
$ npx tsc && find dist -type f | sort
dist/index.js
dist/util/calcul.js
$ rm -rf dist && npx tsc --rootDir . && find dist -type f | sort
dist/src/index.js
dist/src/util/calcul.js
Exemplul 2: Fișier în afara lui rootDir
config.ts este lângă tsconfig.json, nu în src, dar src/index.ts îl importă. tsc explică și de ce fișierul a intrat în program.
// tsconfig.json
{
"compilerOptions": {
"rootDir": "src",
"outDir": "dist"
}
}
// config.ts
export const versiune = "1.0";
// src/index.ts
import { versiune } from "../config";
console.log(versiune);
Rezultat (tsc 5.9)
$ npx tsc
src/index.ts(1,26): error TS6059: File '/proiect/config.ts' is not under 'rootDir' '/proiect/src'. 'rootDir' is expected to contain all source files.
The file is in the program because:
Matched by default include pattern '**/*'
Imported via "../config" from file '/proiect/src/index.ts'
Greșeli frecvente
- Să crezi că
rootDirexclude fișierele din afara ei. Le include în continuare (dacă sunt importate sau prinse deinclude) și dă eroare. - Să confunzi
rootDircurootDirs. A doua unește mai multe directoare la rezolvarea importurilor.
Comenzi înrudite
outDir: Directorul în care tsc scrie fișierele generate, cu aceeași structură de subdirectoare ca sursele.rootDirs: Tratează mai multe directoare ca pe unul singur la rezolvarea importurilor relative (pentru cod generat separat).composite: Pregătește un proiect pentru a fi folosit prin „references” de alte proiecte și construit cu tsc -b.declarationDir: Directorul în care se scriu fișierele .d.ts, separat de outDir unde ajunge JavaScript-ul.