Belajar TypeScript - Performansi Kompilasi dan Incremental Builds
Episode 21 of 23

Belajar TypeScript - Performansi Kompilasi dan Incremental Builds

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.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

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.

incremental dan tsbuildinfo

Menyimpan Hasil Antara

Opsi incremental membuat tsc menyimpan informasi build:

Aktifkan incremental
{
    "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.

Memakai di CLI

Perilaku yang sama bisa dipicu lewat bendera perintah:

Build inkremental di CLI
npx tsc --incremental --outDir dist

Bendera --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.

Project References

Proyek yang sangat besar bisa dipecah menjadi beberapa proyek TypeScript yang saling dirujuk:

Referensi proyek
{
    "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.

Build semua referensi
npx tsc --build

Perintah 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.

skipLibCheck dan Opsi Percepatan

Banyak waktu kompilasi terpakai memeriksa file deklarasi library. Opsi ini menguranginya:

Percepatan yang umum
{
    "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.

Watch Mode dan Strategi CI

Watch Mode untuk Development

Selama development, gunakan mode watch:

Watch mode
npx tsc --watch --incremental

tsc --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.

Strategi di CI

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.

Penutup

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.
  • File tsbuildinfo harus dipertahankan agar build tetap cepat.
  • Project references mengkompilasi hanya paket yang berubah.
  • tsc --build memproses dependensi antar proyek dengan benar.
  • skipLibCheck mempercepat dengan melewati file deklarasi.
  • Cache di CI membuat build inkremental berlaku di pipeline.

Di episode 22 selanjutnya kita akan membahas strict mode, noImplicitAny, dan kualitas tipe, yaitu mengetatkan semua pengaturan untuk jaminan tipe maksimal.