Ovladajte TypeScript konfiguracijom s ovim detaljnim vodičem za tsconfig.json. Naučite ključne opcije kompajlera, postavljanje projekta i napredne konfiguracije za efikasan razvoj.
TypeScript Konfiguracija: Sveobuhvatan Vodič za tsconfig.json
TypeScript, nadskup JavaScripta, unosi statičko tipiziranje u dinamični svijet web razvoja. Dobro konfigurirana tsconfig.json
datoteka ključna je za iskorištavanje pune snage TypeScripta. Ovaj vodič pruža sveobuhvatan pregled datoteke tsconfig.json
, pokrivajući bitne opcije kompajlera, postavljanje projekta i napredne konfiguracije.
Što je tsconfig.json?
Datoteka tsconfig.json
je konfiguracijska datoteka koja specificira opcije kompajlera za TypeScript projekt. Ona govori TypeScript kompajleru kako transpilira TypeScript kod u JavaScript. Ova datoteka je ključna za definiranje strukture projekta, postavljanje pravila kompilacije i osiguravanje dosljednosti unutar razvojnog tima, bez obzira nalazi li se tim u jednom uredu ili je raspoređen na više kontinenata.
Stvaranje datoteke tsconfig.json
Da biste stvorili datoteku tsconfig.json
, navigirajte do korijenskog direktorija vašeg projekta u terminalu i pokrenite sljedeću naredbu:
tsc --init
Ova naredba generira osnovnu datoteku tsconfig.json
s često korištenim opcijama kompajlera. Zatim možete prilagoditi datoteku kako bi odgovarala specifičnim zahtjevima vašeg projekta. Tipična datoteka tsconfig.json
uključivat će opcije kao što su compilerOptions
, include
i exclude
.
Bitne opcije kompajlera
Odjeljak compilerOptions
je srce datoteke tsconfig.json
. Sadrži širok raspon opcija koje kontroliraju ponašanje TypeScript kompajlera. Evo nekih od najvažnijih opcija kompajlera:
target
Opcija target
specificira ciljnu verziju ECMAScripta za generirani JavaScript kod. Uobičajene vrijednosti uključuju ES5
, ES6
(ES2015), ES2016
, ES2017
, ES2018
, ES2019
, ES2020
, ES2021
, ES2022
, ESNext
. Odabir pravog cilja ključan je za osiguravanje kompatibilnosti s namjeravanim okruženjem za izvođenje, kao što su preglednici ili verzije Node.js-a.
Primjer:
{
"compilerOptions": {
"target": "ES2020"
}
}
module
Opcija module
specificira stil generiranja koda modula. Uobičajene vrijednosti uključuju CommonJS
, AMD
, System
, UMD
, ES6
(ES2015), ES2020
i ESNext
. Izbor sustava modula ovisi o ciljnom okruženju i korištenom povezivaču modula (npr. Webpack, Rollup, Parcel). Za Node.js često se koristi CommonJS
, dok se za moderne web aplikacije preferira ES6
ili ESNext
s povezivačem modula. Korištenje ESNexta
omogućuje programerima da iskoriste najnovije značajke i optimizacije, oslanjajući se na povezivač da obradi konačni format modula.
Primjer:
{
"compilerOptions": {
"module": "ESNext"
}
}
lib
Opcija lib
specificira popis bibliotečnih datoteka koje će biti uključene u kompilaciju. Ove bibliotečne datoteke pružaju definicije tipova za ugrađene JavaScript API-je i API-je preglednika. Uobičajene vrijednosti uključuju ES5
, ES6
, ES2015
, ES2016
, ES2017
, ES2018
, ES2019
, ES2020
, ES2021
, ES2022
, ESNext
, DOM
, WebWorker
, ScriptHost
, ES2015.Core
, ES2015.Collection
, ES2015.Iterable
, ES2015.Promise
, ES2015.Proxy
, ES2015.Reflect
, ES2015.Generator
, ES2015.Symbol
, ES2015.Symbol.WellKnown
, ES2016.Array.Include
, ES2017.object
, ES2017.Intl
, ES2017.SharedMemory
, ES2017.String
, ES2017.TypedArrays
, ES2018.Intl
, ES2018.Promise
, ES2018.RegExp
, ES2019.Array
, ES2019.Object
, ES2019.String
, ES2019.Symbol
, ES2020.BigInt
, ES2020.Promise
, ES2020.String
, ES2020.Symbol.WellKnown
, ES2021.Promise
, ES2021.String
, ES2021.WeakRef
, ES2022.Error
, ES2022.Object
, ES2022.String
i mnoge druge. Odabir odgovarajućih biblioteka osigurava da TypeScript kompajler ima potrebne informacije o tipovima za ciljno okruženje. Korištenje DOM biblioteke omogućuje projektu da kompajlira kod koji koristi API-je specifične za preglednik bez grešaka u tipovima.
Primjer:
{
"compilerOptions": {
"lib": ["ES2020", "DOM"]
}
}
allowJs
Opcija allowJs
omogućuje TypeScript kompajleru da kompajlira JavaScript datoteke zajedno s TypeScript datotekama. Ovo je korisno za postupnu migraciju postojećih JavaScript projekata na TypeScript. Postavljanje ove opcije na true
omogućuje kompajleru obradu .js
datoteka, što omogućuje postupno usvajanje TypeScripta unutar projekta.
Primjer:
{
"compilerOptions": {
"allowJs": true
}
}
jsx
Opcija jsx
specificira kako treba rukovati JSX sintaksom. Uobičajene vrijednosti uključuju preserve
, react
, react-native
i react-jsx
. Opcija preserve
zadržava JSX sintaksu u izlaznom kodu, dok react
pretvara JSX u pozive React.createElement. Opcija react-jsx
koristi novu JSX transformaciju uvedenu u Reactu 17, koja ne zahtijeva importiranje Reacta. Odabir ispravne JSX opcije ključan je za projekte koji koriste React ili druge biblioteke temeljene na JSX-u.
Primjer:
{
"compilerOptions": {
"jsx": "react-jsx"
}
}
declaration
Opcija declaration
generira odgovarajuće .d.ts
deklaracijske datoteke za svaku TypeScript datoteku. Deklaracijske datoteke sadrže informacije o tipovima i koriste ih drugi TypeScript projekti za korištenje kompajliranog koda. Generiranje deklaracijskih datoteka ključno je za stvaranje višekratno upotrebljivih biblioteka i modula. Ove datoteke omogućuju drugim TypeScript projektima da razumiju tipove i sučelja koje biblioteka izlaže, bez potrebe za kompilacijom izvornog koda.
Primjer:
{
"compilerOptions": {
"declaration": true
}
}
sourceMap
Opcija sourceMap
generira source map datoteke, koje mapiraju generirani JavaScript kod natrag na izvorni TypeScript kod. Source mape su ključne za debugiranje TypeScript koda u preglednicima i drugim okruženjima. Kada se dogodi greška u JavaScript kodu, source mapa omogućuje programeru da vidi odgovarajući TypeScript kod u debuggeru, što olakšava prepoznavanje i ispravljanje problema.
Primjer:
{
"compilerOptions": {
"sourceMap": true
}
}
outDir
Opcija outDir
specificira izlazni direktorij za generirane JavaScript datoteke. Ova opcija pomaže u organiziranju izlaznih datoteka projekta odvajanjem izvornog koda od kompajliranog koda. Korištenje outDir
olakšava upravljanje procesom izgradnje i implementaciju aplikacije.
Primjer:
{
"compilerOptions": {
"outDir": "dist"
}
}
rootDir
Opcija rootDir
specificira korijenski direktorij TypeScript projekta. Kompajler koristi ovaj direktorij kao osnovu za rješavanje naziva modula. Ova opcija je posebno važna za projekte sa složenom strukturom direktorija. Ispravno postavljanje rootDir
osigurava da kompajler može pronaći sve potrebne module i ovisnosti.
Primjer:
{
"compilerOptions": {
"rootDir": "src"
}
}
strict
Opcija strict
omogućuje sve stroge opcije provjere tipova. Ovo se visoko preporučuje za nove TypeScript projekte jer pomaže u ranom otkrivanju potencijalnih grešaka u procesu razvoja. Omogućavanje strogog načina rada nameće stroža pravila provjere tipova, što dovodi do robusnijeg i održivijeg koda. Najbolja je praksa omogućiti strogi način rada u svim novim TypeScript projektima.
Primjer:
{
"compilerOptions": {
"strict": true
}
}
esModuleInterop
Opcija esModuleInterop
omogućuje interoperabilnost između CommonJS i ES modula. Ovo je važno za projekte koji koriste obje vrste modula. Kada je esModuleInterop
omogućen, TypeScript će automatski rješavati razlike između CommonJS i ES modula, olakšavajući import i export modula između ta dva sustava. Ova opcija je posebno korisna pri radu s bibliotekama trećih strana koje mogu koristiti različite sustave modula.
Primjer:
{
"compilerOptions": {
"esModuleInterop": true
}
}
moduleResolution
Opcija moduleResolution
specificira kako TypeScript rješava importe modula. Uobičajene vrijednosti uključuju Node
i Classic
. Strategija rješavanja modula Node
je zadana i temelji se na algoritmu za rješavanje modula Node.js-a. Strategija rješavanja modula Classic
je starija i rjeđe se koristi. Korištenje strategije rješavanja modula Node
osigurava da TypeScript može ispravno riješiti importe modula u Node.js okruženju.
Primjer:
{
"compilerOptions": {
"moduleResolution": "Node"
}
}
baseUrl
i paths
Opcije baseUrl
i paths
koriste se za konfiguriranje rješavanja modula za ne-relativne importe modula. Opcija baseUrl
specificira osnovni direktorij za rješavanje ne-relativnih naziva modula. Opcija paths
omogućuje mapiranje naziva modula na specifične lokacije na datotečnom sustavu. Ove opcije su posebno korisne za projekte sa složenom strukturom direktorija i za pojednostavljivanje importa modula. Korištenje baseUrl
i paths
može učiniti kod čitljivijim i lakšim za održavanje.
Primjer:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@components/*": ["src/components/*"],
"@utils/*": ["src/utils/*"]
}
}
}
Opcije Include i Exclude
Opcije include
i exclude
specificiraju koje datoteke treba uključiti u kompilaciju, a koje izostaviti. Ove opcije koriste glob uzorke za podudaranje naziva datoteka. Korištenje opcija include
i exclude
omogućuje kontrolu nad time koje datoteke obrađuje TypeScript kompajler, poboljšavajući performanse izgradnje i smanjujući greške. Najbolja je praksa eksplicitno specificirati datoteke koje će biti uključene u kompilaciju.
Primjer:
{
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
}
Opcija Extends
Opcija extends
omogućuje nasljeđivanje opcija kompajlera iz druge tsconfig.json
datoteke. Ovo je korisno za dijeljenje zajedničkih postavki konfiguracije između više projekata ili za stvaranje osnovnih konfiguracija. Korištenje opcije extends
promiče ponovnu upotrebu koda i smanjuje dupliciranje. Najbolja je praksa stvarati osnovne konfiguracije i proširivati ih u pojedinačnim projektima.
Primjer:
{
"extends": "./tsconfig.base.json",
"compilerOptions": {
"jsx": "react-jsx"
},
"include": ["src/**/*"]
}
Napredne Konfiguracije
Osim bitnih opcija kompajlera, tsconfig.json
podržava napredne konfiguracije za specijalizirane scenarije.
Inkrementalna Kompilacija
Za velike projekte, inkrementalna kompilacija može značajno poboljšati vrijeme izgradnje. TypeScript može keširati rezultate prethodnih kompilacija i ponovno kompajlirati samo datoteke koje su se promijenile. Omogućavanje inkrementalne kompilacije može drastično smanjiti vrijeme izgradnje za velike projekte. To je posebno važno za projekte s velikim brojem datoteka i ovisnosti.
{
"compilerOptions": {
"incremental": true,
"tsBuildInfoFile": ".tsbuildinfo"
}
}
Reference na Projekte
Reference na projekte omogućuju vam da strukturirate velike TypeScript projekte u manje, neovisne module. To može poboljšati vrijeme izgradnje i organizaciju koda. Korištenje referenci na projekte može učiniti velike projekte lakšim za upravljanje i održavanje. Najbolja je praksa koristiti reference na projekte za velike, složene projekte.
{
"compilerOptions": {
"composite": true
},
"references": [
{ "path": "./module1" },
{ "path": "./module2" }
]
}
Prilagođene Definicije Tipova
Ponekad ćete možda trebati pružiti definicije tipova za JavaScript biblioteke koje ih nemaju. Možete stvoriti prilagođene .d.ts
datoteke kako biste definirali tipove za te biblioteke. Stvaranje prilagođenih definicija tipova omogućuje vam korištenje JavaScript biblioteka u vašem TypeScript kodu bez žrtvovanja sigurnosti tipova. To je posebno korisno pri radu sa starijim JavaScript kodom ili bibliotekama koje ne pružaju vlastite definicije tipova.
// custom.d.ts
declare module 'my-library' {
export function doSomething(x: number): string;
}
Najbolje Prakse
- Koristite strogi način (Strict Mode): Omogućite opciju
strict
za poboljšanu provjeru tipova. - Specificirajte cilj (Target): Odaberite odgovarajuću
target
verziju za vaše okruženje za izvođenje. - Organizirajte izlaz: Koristite
outDir
za odvajanje izvornog koda od kompajliranog koda. - Upravljajte ovisnostima: Koristite
include
iexclude
za kontrolu nad time koje se datoteke kompajliraju. - Iskoristite opciju Extends: Dijelite zajedničke postavke konfiguracije s opcijom
extends
. - Pohranite konfiguraciju u sustav za kontrolu verzija: Pohranite
tsconfig.json
u git kako biste održali dosljednost među razvojnim okruženjima i CI/CD cjevovodima.
Rješavanje Uobičajenih Problema
Konfiguriranje tsconfig.json
ponekad može biti izazovno. Evo nekih uobičajenih problema i njihovih rješenja:
Problemi s Rješavanjem Modula
Ako naiđete na greške u rješavanju modula, provjerite je li opcija moduleResolution
ispravno konfigurirana i jesu li opcije baseUrl
i paths
pravilno postavljene. Dvaput provjerite putanje navedene u opciji paths
kako biste bili sigurni da su ispravne. Provjerite jesu li svi potrebni moduli instalirani u direktoriju node_modules
.
Greške u Tipovima
Greške u tipovima mogu se pojaviti ako su definicije tipova netočne ili nedostaju. Provjerite imate li instalirane ispravne definicije tipova za sve biblioteke koje koristite. Ako koristite JavaScript biblioteku koja nema definicije tipova, razmislite o stvaranju prilagođenih definicija tipova.
Greške pri Kompilaciji
Greške pri kompilaciji mogu se pojaviti ako u vašem TypeScript kodu postoje sintaktičke greške ili greške u tipovima. Pažljivo pregledajte poruke o greškama i ispravite sve sintaktičke greške ili greške u tipovima. Provjerite slijedi li vaš kod konvencije kodiranja TypeScripta.
Zaključak
Dobro konfigurirana tsconfig.json
datoteka ključna je za uspješan TypeScript projekt. Razumijevanjem bitnih opcija kompajlera i naprednih konfiguracija, možete optimizirati svoj razvojni tijek rada, poboljšati kvalitetu koda i osigurati kompatibilnost s ciljnim okruženjem. Ulaganje vremena u pravilno konfiguriranje tsconfig.json
isplatit će se dugoročno smanjenjem grešaka, poboljšanjem održivosti i pojednostavljivanjem procesa izgradnje. To rezultira efikasnijim i pouzdanijim razvojem softvera. Informacije pružene ovdje dizajnirane su da budu univerzalno primjenjive i trebale bi pružiti čvrst temelj za početak novog projekta s TypeScriptom.
Ne zaboravite konzultirati službenu TypeScript dokumentaciju za najnovije informacije i detaljna objašnjenja svih dostupnih opcija kompajlera. TypeScript dokumentacija je vrijedan resurs za razumijevanje složenosti TypeScript konfiguracije.