rootDir în TypeScript

Spune care director este rădăcina surselor; structura de sub el se păstrează în outDir.

Sintaxă
"compilerOptions": {
  "rootDir": "./src",
  "outDir": "./dist"
}

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ă rootDir exclude fișierele din afara ei. Le include în continuare (dacă sunt importate sau prinse de include) și dă eroare.
  • Să confunzi rootDir cu rootDirs. 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.