
Déminifier JS et CSS : déboguer du code minifié en production
Source maps absentes : retrouvez du JS et du CSS lisibles dans le navigateur avec unminify et beautify — formatage seul, noms mangled perdus.
Quand le JS et le CSS de production tiennent sur une ligne illisible
Une stack trace qui pointe vers app.min.js:1:18432, ou une feuille de styles d’une seule ligne de 40 Ko, est d’abord un problème de formatage, pas un problème de décompilateur. La minification a retiré espaces et commentaires. Le mangling (Terser mangle, compression d’identifiants cssnano si elle est activée) a renommé les symboles. Le pretty-print rend la forme. Seule une source map rend les noms d’origine. Quand les maps manquent et qu’il vous faut une copie locale, le déminificateur JavaScript en ligne et le déminificateur CSS en ligne réindentent dans le navigateur. Ils n’envoient pas le payload. Ils n’annulent pas le mangling. Pour le parcours DevTools et source maps côté JavaScript seul, gardez le guide pour déboguer du JavaScript minifié sous la main. Cet article décrit le workflow des pages outils JS et CSS.
Quand unminify est le bon choix, et quand il ne l’est pas
Le guide de débogage du JavaScript minifié est l’approfondissement. Il couvre le pretty-print de Chrome, sourceMappingURL, les maps cachées, et pourquoi a ne redeviendra jamais getUserProfile sans map. Ce texte ne refait pas cette visite de DevTools. Il répond à une autre recherche. Vous avez déjà un extrait JS ou CSS minifié (ticket, copie CDN, fichier de thème) et vous voulez les pages FastMinify qui le formatent. Les formateurs de la famille sont sur le hub d’outils unminify.
Unminify et beautify sur FastMinify réindentent. Ce ne sont pas des décompilateurs. Tenez ces limites pour strictes, car elles collent à ce que font les outils (js-beautify dans l’onglet, taille d’indent et espaces ou tabulations, contrôle de syntaxe d’abord).
Limitations :
Ce qui fonctionne :
D’abord les maps, puis le pretty-print, puis les pages outils
Suivez cet ordre. Les pages déminifier JavaScript et déminifier CSS sont l’étape 3, quand les maps manquent et qu’il vous faut une copie formatée.
1Cherchez une source map
Dans DevTools → Sources, cherchez les fichiers d’origine à côté du bundle, un fichier .map voisin, ou un commentaire //# sourceMappingURL= (JS) / /*# sourceMappingURL= (CSS). Si une map charge, déboguez là et arrêtez-vous. Aucun formateur ne bat les noms d’origine.
2Pretty-print dans le navigateur ou l’éditeur
Dans Chrome Sources, le contrôle {} Pretty Print formate le fichier sur place. Dans VS Code, lancez Format Document sur un .min.js ou .min.css sauvé. La limite reste la même : les noms restent raccourcis. Pour un bug de cascade CSS, pretty-print plus le panneau Styles bat souvent la copie hors du navigateur.
3Déminifiez en local seulement si vous voulez une copie dans un fichier
Sans map, vous pouvez obtenir du code indenté sur disque ou dans un ticket. Collez le JS dans le déminificateur JavaScript en ligne ou le CSS dans le déminificateur CSS en ligne. Le traitement reste dans le navigateur. La taille et le caractère d’indentation sont des réglages de mise en forme, pas un désobfuscateur.
4Naviguez avec des littéraux, pas avec des noms
Cherchez des chaînes uniques, des URL, des tokens de couleur, des messages d’erreur. Suivez les motifs if / return / @media. N’attendez pas que a redevienne un identifiant réel.
Exemple :
Avant (minifié) :
Après (déminifié) :
Vous récupérez une forme lisible, pas le code source d’origine
Collez une IIFE d’une ligne ou un morceau de bundle Terser. Le déminificateur JavaScript lance js-beautify dans le navigateur après un contrôle de syntaxe. Vous obtenez le wrapping et l’indent. Vous n’obtenez pas les noms d’avant le mangle. Le !0 de l’exemple est volontaire : beaucoup de minifiers réécrivent true ainsi, et le formatage ne le retransforme pas en true.
Avant
Après
{} Chrome, restez sur le guide de débogage JSLe CSS compressé est en général une ligne avec les sélecteurs collés. Le déminificateur CSS formate avec js-beautify : sélecteurs sur leurs lignes, déclarations indentées, blocs @media imbriqués visuellement. Spécificité et cascade ne changent pas, seuls les blancs changent. Si une règle « disparaît » après formatage, elle ne s’appliquait déjà pas ; le formatage ne l’a pas effacée.
Avant
Après
.9 restent courtes ; ce n’est pas un outil « expand to longhand »Deux boucles concrètes avec les pages unminify
Ouvrez le déminificateur JavaScript en ligne. Collez un seul extrait (une fonction, un chunk webpack, un bookmarklet). Cliquez sur Déminifier. La sortie est indentée dans le panneau de droite. Copiez-la dans l’éditeur et cherchez une chaîne unique de la stack trace. Tout reste dans l’onglet.
1. Copiez le fichier qui plante, pas la page HTML
Depuis DevTools → Network ou Sources, sauvegardez le fichier .js nommé par la trace. Coller tout le document HTML dans un déminificateur JS fera échouer le contrôle de syntaxe.
2. Collez dans unminify-js
Laissez l’indent à 2 espaces sauf si l’équipe utilise des tabulations. En cas d’erreur de syntaxe, le collage est tronqué ou mélangé avec du HTML : corrigez le collage, l’outil fait son travail.
3. Cherchez des littéraux, puis retournez dans DevTools
Trouvez le message d’erreur ou l’URL. Notez le flux de contrôle autour. Si vous avez encore besoin de breakpoints, utilisez le pretty-print de Chrome sur le fichier live. Une copie formatée sur disque ne remplace pas une pile d’appels en pause.
Ouvrez le déminificateur CSS en ligne. Collez la feuille compressée (ou le morceau qui contient le sélecteur). Après formatage, cherchez la classe du DOM. Comparez avec les styles Computed de DevTools : le formatage ne change pas quelle règle gagne.
1. Copiez la feuille de styles, pas le HTML minifié
Panneau Network → la requête .css. Les blocs <style> inline se collent aussi s’ils ne contiennent que du CSS valide.
2. Déminifiez, puis cherchez la classe ou l’id
Une liste de sélecteurs du type .btn,.cta se sépare sur deux lignes. C’est de la lisibilité, pas un changement de cascade.
3. Fiez-vous au panneau Styles pour le résultat réel
Le fichier formaté montre ce qui a été livré. Le panneau Styles montre ce qui s’applique vraiment (surcharges, couches, !important). Servez-vous des deux.
Sur les deux pages unminify, la taille et le caractère d’indent sont les contrôles de format. Minify les ignore. Il n’y a pas d’interrupteur « restaurer les noms d’origine ». Pour le reste de la famille (HTML, JSON, XML), voir le hub d’outils unminify.
Unminify et beautify partagent le même formateur pour des intentions de recherche différentes
Sur FastMinify, déminifier JavaScript et beautifier JavaScript en ligne formatent tous les deux avec js-beautify après un contrôle de syntaxe. Le même couple existe pour le CSS : déminifier CSS et beautifier CSS en ligne. La différence tient à l’intention, pas à un second algorithme. Les URL unminify ciblent une sortie de production compressée. Les URL beautify ciblent du code source que vous jugez déjà lisible, mais que vous voulez indenter proprement. Le tour plus long des formateurs est le guide du code beautifier.
Si le fichier est déjà sur disque et que l’équipe utilise Prettier ou les services de langage JS et CSS intégrés, Format Document fait le même travail. Il modifie les blancs, pas les symboles. Utilisez FastMinify quand l’extrait se trouve dans un ticket, une réponse CDN ou sur une machine sans votre profil d’éditeur. Aucun des deux chemins ne restaure les noms raccourcis.
Et ensuite
Déboguez le JS et le CSS minifiés dans cet ordre. Commencez par les source maps si elles existent, passez au pretty-print de DevTools si vous n’avez besoin que de la ligne qui plante, et n’utilisez un déminificateur dans le navigateur que si vous voulez une copie formatée alors que les maps manquent. Les pages unminify et beautify de FastMinify réindentent avec js-beautify ; elles n’annulent pas le mangling. Pour l’approfondissement Chrome et maps, gardez le guide de débogage JavaScript. Pour formater au quotidien du code déjà lisible, utilisez les URL beautify.
Maps absentes et besoin de JS ou CSS indenté en local ? Formatez dans le navigateur, puis retournez dans DevTools.
Articles connexes

HTTP/2 et HTTP/3 changent le trajet des fichiers, pas leur poids. Mesures de taille, de compilation et de bundling : ce que la minification apporte encore.

Convertissez un epoch Unix en date lisible et inversement, distinguez secondes et millisecondes, et évitez les pièges de fuseau, de JWT et de changement d’heure.

Lisez une expression cron champ par champ, voyez ses prochaines exécutions en UTC ou en heure locale et évitez les pièges de pas, de fuseau et de dialecte.