Tailwind CSS Academy · Pelajaran

Cara Kerja Mesin JIT

Pahami cara mode JIT bawaan Tailwind v3 memindai berkas Anda sesuai kebutuhan dan hanya membuat kelas utilitas yang benar-benar digunakan dalam markup.

Pelajaran 1 dari 413 langkah

Cara Kerja Mesin JIT adalah pelajaran Tailwind CSS Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Tailwind CSS Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Tailwind CSS Academy mencakup 4 pelajaran total.

Apa Itu Mesin JIT

Mesin Just-In-Time (JIT) milik Tailwind, yang diperkenalkan pada Tailwind v2.1 dan dijadikan bawaan pada v3, mengubah secara mendasar cara Tailwind menghasilkan CSS. Alih-alih membuat sebelumnya setiap kemungkinan kombinasi kelas utilitas saat build (yang menghasilkan CSS berukuran megabita), JIT memindai berkas proyek Anda dan hanya menghasilkan kelas yang benar-benar digunakan.

Hasilnya adalah berkas CSS yang biasanya hanya berukuran beberapa kilobita saat pengembangan dan bahkan lebih kecil saat produksi, tanpa kode yang terbuang.

Pendekatan Sebelum JIT vs JIT

Sebelum JIT, Tailwind menggunakan tahap pembersihan di akhir build: semua CSS yang mungkin (~10MB) dibuat, lalu setiap kelas yang tidak ditemukan dalam templat dihapus. Proses ini lambat, memerlukan konfigurasi pembersihan yang cermat, dan gagal saat nama kelas dibuat secara dinamis.

JIT membalik proses ini: berkas dipindai terlebih dahulu dan CSS hanya dibuat untuk kelas yang ditemukan. Hasilnya langsung berukuran kecil di setiap lingkungan — pengembangan, staging, dan produksi — serta build berlangsung jauh lebih cepat.

// Old approach: generate ALL classes, then purge
// - ~10MB initial CSS
// - Slow build
// - Purge config errors silently broke production

// JIT approach: scan first, generate only used classes
// - ~3-5KB CSS in development
// - Sub-second builds
// - No separate purge step needed

Cara JIT Memindai Berkas Anda

JIT membaca larik content di tailwind.config.js untuk mengetahui berkas mana yang harus dipindai. JIT menggunakan pemindaian cepat berbasis regex (bukan pengurai HTML/JS lengkap) untuk menemukan string yang menyerupai kelas. Setiap string yang cocok dengan pola kelas Tailwind yang dikenal akan dibuatkan CSS-nya.

Inilah alasan konfigurasi larik content dengan benar sangat penting — jika JIT tidak dapat menemukan suatu berkas, kelas yang digunakan di dalamnya tidak akan dibuat.

// tailwind.config.js
module.exports = {
  content: [
    './src/**/*.{html,js,jsx,ts,tsx}',
    './pages/**/*.{js,jsx,ts,tsx}',
    './components/**/*.{js,jsx,ts,tsx}',
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}

Pembuatan Kelas Sesuai Permintaan

Saat JIT mendeteksi kelas dalam markup, JIT segera membuat aturan CSS yang tepat untuknya. Jika Anda menggunakan bg-blue-500, hanya satu aturan warna tersebut yang dibuat — bukan seluruh skala warna biru. Jika kemudian Anda menambahkan bg-blue-700, JIT akan membuat aturan baru itu pada build ulang berikutnya.

Dalam pengembangan, proses ini berlangsung dalam hitungan milidetik berkat pemantau berkas. Pendekatan JIT berarti Anda mendapatkan CSS tanpa beban berlebih — setiap byte dalam stylesheet Anda benar-benar digunakan.

/* Only classes actually used in your templates are generated */

/* If you use: bg-blue-500, text-white, px-4, py-2, rounded-lg */
/* JIT generates: */
.bg-blue-500 { background-color: #3b82f6; }
.text-white { color: #fff; }
.px-4 { padding-left: 1rem; padding-right: 1rem; }
.py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; }
.rounded-lg { border-radius: 0.5rem; }

/* NOT generated: bg-blue-100, bg-blue-200, ... bg-blue-900, text-gray-*, etc. */

Nilai Sewenang-wenang yang Didukung JIT

JIT mengaktifkan sintaks nilai sewenang-wenang — kemampuan menggunakan nilai CSS apa pun secara langsung dalam nama kelas dengan notasi tanda kurung siku. Sebelum JIT, nilai sewenang-wenang tidak mungkin digunakan tanpa konfigurasi khusus. JIT membuat aturan sesuai permintaan saat mendeteksi sintaks tanda kurung siku.

Contohnya, w-[347px], text-[#1a2b3c], atau top-[calc(100vh-64px)] dapat langsung digunakan. JIT mendeteksi tanda kurung siku, mengurai nilainya, dan membuat CSS yang benar-benar diperlukan.

<!-- JIT generates CSS for arbitrary values on demand -->
<div class="w-[347px]">Exactly 347px wide</div>
<p class="text-[#1a2b3c] text-[22px]">Custom color and size</p>
<div class="top-[calc(100vh-64px)]">Viewport height minus navbar</div>
<div class="grid-cols-[1fr_2fr_1fr]">Custom grid columns</div>

JIT dan Nama Kelas Dinamis

Keterbatasan penting dari pendekatan JIT berbasis pemindaian adalah JIT tidak dapat mendeteksi nama kelas yang dibuat secara dinamis. Jika Anda membuat nama kelas melalui penggabungan string dalam JavaScript, JIT tidak akan melihat hasilnya saat pemindaian.

Solusinya adalah menghindari pembuatan kelas secara parsial. Selalu gunakan string kelas lengkap, atau gunakan daftar aman dalam konfigurasi untuk kelas yang ditentukan secara dinamis.

// BAD: JIT cannot statically detect the assembled class
const color = 'blue';
const shade = '500';
const className = 'bg-' + color + '-' + shade; // 'bg-blue-500' — NOT detected!

// GOOD: Use complete class strings
const classMap = {
  blue: 'bg-blue-500',
  red: 'bg-red-500',
  green: 'bg-green-500',
};
const className = classMap[color]; // full string — JIT detects all values in the object

Mode Pemantauan JIT dalam Pengembangan

Menjalankan npx tailwindcss -i input.css -o output.css --watch memulai JIT dalam mode pemantauan. JIT memantau semua berkas yang cocok dengan pola glob content dan membangun ulang berkas CSS dalam hitungan milidetik setiap kali suatu berkas berubah.

Dalam proyek Vite atau Next.js, JIT Tailwind terintegrasi dengan alur pipeline HMR (Hot Module Replacement) milik alat build, sehingga pembaruan CSS langsung muncul di peramban tanpa memuat ulang seluruh halaman.

# Start Tailwind JIT in watch mode (standalone)
npx tailwindcss -i ./src/input.css -o ./dist/output.css --watch

# Vite integrates Tailwind automatically via postcss.config.js:
# postcss.config.js
module.exports = {
  plugins: {
    tailwindcss: {},
    autoprefixer: {},
  },
}

Pembuatan Varian oleh JIT

Sebelum JIT, Anda harus mengaktifkan varian secara eksplisit dalam berkas konfigurasi (seperti hover, focus, dark) untuk setiap kelompok utilitas. Mengaktifkan setiap varian untuk setiap utilitas akan membuat berkas CSS yang sangat besar sebelumnya.

JIT menyelesaikan masalah ini sepenuhnya — setiap varian berfungsi pada setiap utilitas tanpa konfigurasi. hover:bg-blue-500, dark:text-white, lg:hover:bg-blue-700 — semuanya dibuat sesuai permintaan tanpa konfigurasi apa pun.

<!-- All of these work without any config in Tailwind v3 JIT -->
<button class="bg-blue-600 hover:bg-blue-700 active:bg-blue-800
               focus-visible:ring-2 focus-visible:ring-blue-500
               disabled:opacity-50 disabled:cursor-not-allowed
               dark:bg-blue-500 dark:hover:bg-blue-400
               sm:px-4 lg:px-6">
  Click me
</button>

Pola Glob Konten

Array content menggunakan pola glob untuk menentukan file mana yang harus dipindai oleh JIT. Glob seperti './src/**/*.{html,js}' cocok dengan semua file HTML dan JS di mana pun dalam hierarki direktori src.

Kesalahan yang umum terjadi antara lain melupakan ekstensi file, menggunakan jalur dasar yang salah, atau tidak menyertakan paket node_modules yang berisi kelas Tailwind, seperti pustaka komponen UI. Anda juga dapat meneruskan array string, bukan glob, untuk file tertentu.

// tailwind.config.js
module.exports = {
  content: [
    // All templates in src/
    './src/**/*.{html,js,jsx,ts,tsx,vue,svelte}',
    // Specific config file
    './index.html',
    // A UI library that uses Tailwind classes
    './node_modules/@my-ui-lib/components/**/*.{js,ts}',
  ],
}

JIT dalam Produksi vs Pengembangan

JIT menghasilkan kumpulan CSS yang sama dalam lingkungan pengembangan maupun produksi — hanya kelas yang ditemukan dalam file konten Anda. Perbedaannya dalam produksi adalah Tailwind juga menerapkan minifikasi melalui peminimal CSS dalam alat build Anda, dan mungkin autoprefixer PostCSS untuk mendukung peramban lama.

Tidak ada langkah purge terpisah dalam Tailwind v3. Menetapkan NODE_ENV=production dalam perintah build Anda mengaktifkan minifikasi, tetapi tidak mengubah kelas yang dihasilkan — kelas tersebut sudah minimal dalam pengembangan berkat JIT.

# Development build (readable output)
NODE_ENV=development npx tailwindcss -i input.css -o output.css

# Production build (minified)
NODE_ENV=production npx tailwindcss -i input.css -o output.css --minify

# Result sizes:
# Development: ~8KB (readable, not minified)
# Production: ~3KB (same classes, minified + whitespace removed)

Urutan Layer dan JIT

JIT mematuhi urutan layer CSS Tailwind: gaya dasar berada di urutan pertama, kemudian gaya komponen, lalu gaya utilitas. Urutan ini penting karena utilitas secara konvensi memiliki spesifisitas tertinggi — utilitas harus selalu menang saat bertentangan dengan gaya komponen.

CSS khusus yang ditulis dengan @layer utilities juga dihasilkan oleh JIT bersama utilitas bawaan. CSS khusus yang ditulis di luar @layer mana pun berada di antara base dan komponen dalam hal spesifisitas, yang dapat menyebabkan perilaku penimpaan yang tidak terduga.

/* input.css */
@tailwind base;       /* Reset styles, lowest specificity */
@tailwind components; /* @layer components { .btn { ... } } */
@tailwind utilities;  /* All utilities, highest specificity */

/* Custom utility in JIT layer order --*/
@layer utilities {
  .scrollbar-hide {
    -ms-overflow-style: none;
    scrollbar-width: none;
  }
  .scrollbar-hide::-webkit-scrollbar {
    display: none;
  }
}

Pemeriksaan Singkat

Uji pemahaman Anda tentang konsep Tailwind CSS Mastery dari pelajaran ini.

Ringkasan Pelajaran

Dalam pelajaran ini Anda telah mempelajari bahwa JIT memindai file konten Anda sebagai teks untuk menemukan string kelas dan hanya menghasilkan CSS untuk kelas tersebut, sehingga menghapus gaya yang tidak digunakan sejak awal; nilai arbitrer seperti w-[347px] diaktifkan oleh pembuatan sesuai permintaan JIT; dan pembuatan kelas secara dinamis mengganggu deteksi JIT karena JIT tidak dapat menjalankan JavaScript — selalu gunakan string kelas lengkap dalam objek daftar aman. Selanjutnya, kita akan mempelajari pencantuman kelas dinamis dalam daftar aman.

Gratis untuk memulai

Belajar HTML dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
30
Pelajaran
120

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Cara Kerja Mesin JIT” gratis?

Ya — teks lengkap “Cara Kerja Mesin JIT” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Tailwind CSS Academy, upgrade ke CoddyKit PRO. Kursus Tailwind CSS Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Cara Kerja Mesin JIT”?

Pahami cara mode JIT bawaan Tailwind v3 memindai berkas Anda sesuai kebutuhan dan hanya membuat kelas utilitas yang benar-benar digunakan dalam markup. Kamu berlatih Tailwind CSS Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Tailwind CSS Academy?

Tidak diperlukan pengalaman sebelumnya. Tailwind CSS Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Cara Kerja Mesin JIT” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Tailwind CSS Academy ini?

Ya. Setiap pelajaran Tailwind CSS Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Cara Kerja Mesin JIT
  2. Mencantumkan Kelas Dinamis dengan Aman
  3. Menganalisis dan Mengurangi Ukuran Bundel
  4. Nilai Arbitrer dan Biayanya
← Kembali ke Tailwind CSS Academy