Minifier JS et CSS
Collez du code et la version minifiée apparaît au fil de la frappe — avec les caractères économisés.
Sortie minifiée
Mode d’emploi
- Collez du JavaScript ou du CSS dans la zone — la version minifiée apparaît au fil de la frappe, aucun bouton à cliquer.
- Laissez la syntaxe sur Auto, ou choisissez JavaScript / CSS vous-même si la détection s’est trompée ; le résultat se réaffiche immédiatement.
- L’en-tête indique les caractères économisés avant → après. Copiez la sortie ou téléchargez-la sous forme de fichier .js / .css.
Exemple
Saisie
// Total du panier avec le badge livraison offerte 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 }; }
Minifié
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};}
Le commentaire a disparu et les espaces sont réduits, mais chaque identifiant conserve son nom et chaque littéral son orthographe exacte. Le compteur indique 279 → 177 caractères (−37 %).
Règles, limites et problèmes connus
- Espaces et commentaires uniquement. Rien n’est renommé, aucune instruction n’est repliée et aucun code n’est supprimé — la sortie minifiée se comporte donc comme l’original, mais reste plus volumineuse que ce que produit Terser.
- Les commentaires commençant par /*! ou //!, ainsi que ceux mentionnant @license ou @preserve, sont conservés ; tous les autres commentaires sont supprimés.
- Les sauts de ligne restent partout où les supprimer changerait le programme : après return / throw / break / continue / yield / async, et entre deux instructions où JavaScript insérerait automatiquement un point-virgule (a\nb, x={}\nfoo()). La plupart du reste du code tient sur une ligne.
- Le JavaScript est tokenisé, pas analysé : un « /* » dans une chaîne, une expression régulière ou un littéral de gabarit n’est jamais touché. Division et expressions régulières sont distinguées grâce au jeton précédent ; une regex qui s’étend sur une ligne est traitée comme une division.
- Le CSS ne perd que les espaces qui ne peuvent rien signifier : autour de { } ; , > ~ ! et après « : », ainsi que le dernier « ; » avant un « } ». Les espaces de descendance restent (.a .b n’est pas .a.b), l’espace avant « : » reste (a :hover n’est pas a:hover), et calc(100% - 10px) conserve ses espaces car ils font partie de la syntaxe.
- Pas de renommage (mangle), pas de suppression de code mort, pas de drop_console : ces opérations changent le comportement, ce qu’un bouton « minifier » ne devrait pas faire silencieusement.
- Non pris en charge : HTML/SVG (les espaces y dépendent de <pre>, <textarea> et des éléments en ligne), les réécritures de types TypeScript, l’entrée JSX/TSX, les source maps et la fusion multifichiers. JSX est détecté et signalé par un avertissement.
- Une chaîne, un gabarit, un commentaire ou un url( non fermé à la fin de la saisie est un avertissement, pas une erreur : le reste du code est tout de même minifié. Les parenthèses ou accolades non appariées sont aussi un avertissement — ce n’est pas un validateur.
- Les compteurs portent sur les points de code Unicode, pas sur les octets ni les unités UTF-16 ; les pourcentages sont arrondis à l’entier et affichés sous la forme +n % lorsque la sortie grossit. Tout s’exécute dans votre navigateur : rien n’est envoyé, stocké ni ajouté à l’URL.
- Au-delà de 200 000 caractères, le résultat s’actualise environ 0,6 s après l’arrêt de la frappe ; le texte n’est jamais tronqué. La sortie utilise LF et ne se termine pas par un saut de ligne.
Outils associés
Ce dont on a généralement besoin ensuite, une fois le code allégé.