Minifikasi JS & CSS
Tempel kode dan versi terminifikasi muncul saat mengetik — dengan karakter yang dihemat.
Keluaran terminifikasi
Cara menggunakan
- Tempel JavaScript atau CSS ke kotak — versi terminifikasi muncul saat Anda mengetik, tidak ada tombol yang perlu ditekan.
- Biarkan sintaks di Otomatis, atau pilih JavaScript / CSS sendiri bila deteksinya salah; hasilnya langsung dirender ulang.
- Header menampilkan karakter yang dihemat sebelum → sesudah. Salin keluarannya atau unduh sebagai berkas .js / .css.
Contoh
Masukan
// Cart total with the free-shipping badge const TAX = 0.08; function total(items, coupon) { let sum = 0; for (const item of items) { sum += item.price * item.qty; } if (coupon) { sum -= coupon; } return { amount: sum * (1 + TAX), freeShipping: sum > 50 }; }
Terminifikasi
const TAX=0.08;function total(items,coupon){let sum=0;for(const item of items){sum+=item.price*item.qty;}if(coupon){sum-=coupon;}return{amount:sum*(1+TAX),freeShipping:sum>50};}
Komentarnya hilang dan spasinya dirapatkan, tetapi setiap pengenal tetap memakai namanya dan setiap literal tetap memakai ejaan persisnya. Bacaan menunjukkan 279 → 177 karakter (−37%).
Aturan, batasan, dan masalah yang diketahui
- Hanya spasi dan komentar. Tidak ada yang diganti nama, tidak ada pernyataan yang dilipat, dan tidak ada kode yang dibuang — jadi keluaran terminifikasi berperilaku seperti aslinya, tetapi lebih besar daripada hasil Terser.
- Komentar yang diawali /*! atau //!, serta komentar yang menyebut @license atau @preserve, dipertahankan; komentar lain dibuang.
- Jeda baris tetap ada di tempat yang penghapusannya akan mengubah program: setelah return / throw / break / continue / yield / async, dan di antara dua pernyataan yang akan membuat JavaScript menyisipkan titik koma otomatis (a\nb, x={}\nfoo()). Sebagian besar kode lain keluar sebagai satu baris.
- JavaScript ditokenkan, bukan diurai: "/*" di dalam string, ekspresi reguler, atau template literal tidak pernah disentuh. Pembagian dan ekspresi reguler dibedakan dari token sebelumnya; regex yang merentang baris diperlakukan sebagai pembagian.
- CSS hanya kehilangan spasi yang tidak mungkin bermakna: di sekitar { } ; , > ~ ! dan setelah ":", serta ";" terakhir sebelum "}". Spasi keturunan tetap (.a .b bukan .a.b), spasi sebelum ":" tetap (a :hover bukan a:hover), dan calc(100% - 10px) mempertahankan spasinya karena bagian dari sintaks.
- Tanpa penggantian nama (mangle), tanpa penghapusan kode mati, tanpa drop_console: semua itu mengubah perilaku, yang bukan tugas tombol "minifikasi" untuk dilakukan diam-diam.
- Tidak didukung: HTML/SVG (spasinya bergantung pada <pre>, <textarea>, dan elemen inline), penulisan ulang tingkat tipe TypeScript, masukan JSX/TSX, source map, dan penggabungan multi-berkas. JSX dideteksi dan ditandai dengan peringatan.
- String, template, komentar, atau url( yang tidak ditutup di ujung masukan adalah peringatan, bukan kesalahan: sisa kodenya tetap diminifikasi. Kurung yang tidak berpasangan juga peringatan — ini bukan validator.
- Bacaan menghitung titik kode Unicode, bukan byte dan bukan unit UTF-16; persentase dibulatkan ke bilangan bulat dan ditampilkan sebagai +n% bila keluarannya membesar. Semua berjalan di peramban Anda: tidak ada yang diunggah, disimpan, atau ditambahkan ke URL.
- Di atas 200.000 karakter, hasil diperbarui sekitar 0,6 dtk setelah Anda berhenti mengetik; teksnya tidak pernah dipotong. Keluaran memakai LF dan tanpa baris baru di akhir.
Alat terkait
Yang biasanya dibutuhkan berikutnya setelah kodenya kecil.