Ce face baseUrl
Cu baseUrl, un import care nu începe cu ./ sau ../ (de exemplu "utile/calcul") este căutat și în directorul dat, nu doar în node_modules. Scopul era scăparea de căi lungi ca "../../../utile/calcul".
Important: tsc nu rescrie importul în JavaScript-ul generat. Fișierul .js conține tot require("utile/calcul"), iar Node.js nu știe ce înseamnă (vezi exemplul). Opțiunea funcționează doar dacă și unealta care rulează codul (bundler, ts-node cu plugin) știe de ea.
Nu are valoare implicită. Astăzi se recomandă paths fără baseUrl (căile din paths sunt relative la tsconfig.json din TypeScript 4.1) sau câmpul imports din package.json, pe care îl înțelege și Node.js. baseUrl este pe lista opțiunilor care vor fi scoase în versiunile viitoare ale lui TypeScript.
Parametri
| Parametru | Descriere |
|---|---|
"cale" |
Directorul de bază, relativ la tsconfig.json. Implicit: nesetat. |
Exemple
Exemplul 1: tsc găsește modulul, Node.js nu
tsc găsește src/utile/calcul.ts și nu dă eroare (fără baseUrl ar da TS2307). Dar require("utile/calcul") rămâne neschimbat, iar Node.js nu îl găsește.
// tsconfig.json
{
"compilerOptions": {
"baseUrl": "./src",
"module": "commonjs",
"target": "es2022",
"outDir": "dist"
}
}
// src/utile/calcul.ts
export function cuTva(pret: number): number {
return Math.round(pret * 1.19 * 100) / 100;
}
// src/app/index.ts
import { cuTva } from "utile/calcul";
console.log(cuTva(100));
Rezultat (tsc 5.9)
$ npx tsc && cat dist/app/index.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const calcul_1 = require("utile/calcul");
console.log((0, calcul_1.cuTva)(100));
$ node dist/app/index.js 2>&1 | grep Error
Error: Cannot find module 'utile/calcul'
$ npx tsc --baseUrl null
src/app/index.ts(1,23): error TS2307: Cannot find module 'utile/calcul' or its corresponding type declarations.
Greșeli frecvente
- Să folosești
baseUrlîntr-un proiect rulat direct cu Node.js. Compilarea trece, rularea nu. - Să alegi nume de directoare care se suprapun cu pachete reale sau module Node.js (
util,events): importul poate ajunge la pachetul greșit.
Comenzi înrudite
paths: Definește prescurtări pentru importuri (de exemplu „@/utile/calcul” pentru ./src/utile/calcul) folosite la verificarea tipurilor.moduleResolution: Alege regulile după care tsc găsește fișierul din spatele unui import („./calcul.js”, „react”, „@/utile”).rootDirs: Tratează mai multe directoare ca pe unul singur la rezolvarea importurilor relative (pentru cod generat separat).resolvePackageJsonExports: Folosește câmpurile exports și imports din package.json la rezolvarea importurilor de pachete și a celor cu #.