Episode ini membahas mempercepat kompilasi TypeScript: opsi incremental dan tsbuildinfo, project references, skipLibCheck, serta strategi watch mode dan CI. Kalian akan memahami bagaimana tsc menyimpan hasil antara agar build berikutnya jauh lebih cepat.

Saat proyek membesar, tsc yang dulu instan bisa berubah menjadi hitungan detik yang menjengkelkan. Setiap pemanggilan kompilasi di ulang dari nol, termasuk file yang tidak berubah sama sekali. Episode 21 membahas cara memutus pemborosan itu.
Prinsip utamanya sederhana: jangan mengulang pekerjaan yang tidak perlu. TypeScript menyediakan mekanisme untuk menyimpan hasil antara, menandai file yang berubah, dan hanya mengkompilasi bagian yang benar-benar berubah. Build menjadi inkremental.
Episode 21 membahas incremental dan file tsbuildinfo, project references untuk proyek besar, opsi yang mempercepat seperti skipLibCheck, serta strategi memakai semua ini di watch mode dan CI.
Opsi incremental membuat tsc menyimpan informasi build:
{
"compilerOptions": {
"incremental": true,
"tsBuildInfoFile": "node_modules/.cache/tsbuildinfo",
"outDir": "dist"
}
}Dengan incremental: true, tsc menulis file .tsbuildinfo yang mencatat versi file dan output yang sudah diproduksi. Pada build berikutnya, file yang tidak berubah tidak dikompilasi ulang. Hasilnya, build kedua dan seterusnya jauh lebih cepat, terutama di proyek dengan banyak file.
Perilaku yang sama bisa dipicu lewat bendera perintah:
npx tsc --incremental --outDir distBendera --incremental membuat build kedua hanya memproses perubahan. Penting untuk memahami bahwa kecepatan hanya terlihat saat file tsbuildinfo dipertahankan. Di CI, cache harus dipulihkan antarbuild agar keuntungannya tetap terasa.
Proyek yang sangat besar bisa dipecah menjadi beberapa proyek TypeScript yang saling dirujuk:
{
"files": [],
"references": [
{ "path": "./packages/core" },
{ "path": "./packages/api" }
]
}File root di atas hanya berisi daftar referensi, tanpa kode sendiri. Setiap paket menjadi proyek dengan tsconfig masing-masing, misalnya dengan opsi composite: true. Menjalankan tsc --build di root mengkompilasi hanya paket yang berubah, bukan seluruh repositori.
npx tsc --buildPerintah npx tsc --build memproses referensi dengan pemahaman dependensi: perubahan di core hanya membangun ulang core dan paket yang memakainya. Project references adalah jawaban skala untuk monorepo dengan banyak paket TypeScript.
Banyak waktu kompilasi terpakai memeriksa file deklarasi library. Opsi ini menguranginya:
{
"compilerOptions": {
"skipLibCheck": true,
"skipDefaultLibCheck": true,
"noEmit": true
}
}Opsi skipLibCheck: true melewati pemeriksaan tipe pada file .d.ts, karena file itu tidak berubah dan biasanya sudah benar. noEmit: true menghilangkan penulisan output, mempercepat pemeriksaan tipe di CI yang hanya butuh validasi. Keduanya memberi percepatan besar dengan risiko kecil.
Warning
skipLibCheck tidak menonaktifkan pemeriksaan kode kalian sendiri; hanya file deklarasi. Kalau kelak ingin mengetatkan, proyek bisa diaktifkan kembali tanpa mengubah kode aplikasi.
Selama development, gunakan mode watch:
npx tsc --watch --incrementaltsc --watch memantau file dan mengkompilasi ulang hanya yang berubah. Dikombinasikan dengan --incremental, setiap penyimpanan file memicu kompilasi kecil, bukan kompilasi penuh. Editor dan runner seperti tsx memanfaatkan pola yang sama untuk umpan balik cepat.
Di CI, cache menentukan kecepatan:
Tip
Simpan folder cache tsbuildinfo sebagai cache pipeline, contohnya di GitHub Actions dengan action cache yang menunjuk node_modules/.cache. Restore cache sebelum menjalankan tsc membuat build inkremental benar-benar efektif.
Pipeline yang sama mengkompilasi dari awal saat cache tidak tersedia, dan memakai cache saat ada. Dengan begitu, developer dan CI sama-sama menikmati build yang cepat seiring proyek membesar.
Episode 21 membuat kompilasi tetap terasa ringan di proyek besar: incremental dengan tsbuildinfo, project references untuk monorepo, skipLibCheck untuk mempercepat, dan strategi watch mode serta cache CI yang memanfaatkan semuanya.
Inti yang harus dibawa pulang:
incremental: true menyimpan tsbuildinfo dan melewati file tak berubah.tsc --build memproses dependensi antar proyek dengan benar.skipLibCheck mempercepat dengan melewati file deklarasi.Di episode 22 selanjutnya kita akan membahas strict mode, noImplicitAny, dan kualitas tipe, yaitu mengetatkan semua pengaturan untuk jaminan tipe maksimal.