
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 est le workflow des pages outils JS et CSS.
Quand unminify est le bon clic — et quand il ne l’est pas
Le guide de débogage du JavaScript minifié est le deep dive : pretty-print Chrome, sourceMappingURL, maps hidden, et pourquoi a ne redeviendra jamais getUserProfile sans map. Ce texte ne refait pas cette visite 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 dures — elles collent à ce que font les outils (js-beautify dans l’onglet, taille d’indent et espaces vs tabulations, contrôle de syntaxe d’abord).
Limitations :
Ce qui fonctionne :
Workflow : maps d’abord, puis 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 voisin .map, 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
Chrome Sources : le contrôle {} Pretty Print formate le fichier sur place. VS Code : Format Document sur un .min.js ou .min.css sauvé. Même limite : les noms restent mangled. 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 fichier
Pas de map, et vous voulez du source 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. Taille et caractère d’indent sont des réglages de 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é) :
Ce que vous récupérez : une forme lisible, pas le 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 — seulement les blancs. 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 »Utiliser les pages unminify : deux boucles concrètes
Ouvrez le déminificateur JavaScript en ligne. Collez un seul extrait (une fonction, un chunk webpack, un bookmarklet). Cliquez 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.
Étape 1 : copiez le fichier qui plante, pas la page HTML
Depuis DevTools → Network ou Sources, enregistrez le .js nommé par la trace. Coller tout le document HTML dans un déminificateur JS fera échouer le contrôle de syntaxe.
Étape 2 : collez dans unminify-js
Laissez l’indent à 2 espaces sauf si l’équipe utilise des tabulations. Si vous voyez une erreur de syntaxe, le collage est tronqué ou mélangé avec du HTML — corrigez le collage, ne baissez pas le niveau de l’outil.
Étape 3 : cherchez des littéraux, puis retournez dans DevTools
Trouvez le message d’erreur ou l’URL. Notez le flux de contrôle autour. Pretty-printtez le fichier live dans Chrome si vous avez encore besoin de breakpoints — 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.
Étape 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.
Étape 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.
Étape 3 : gardez le panneau Styles pour la vérité
Le fichier formaté dit ce qui a été livré. Le panneau Styles dit ce qui s’applique vraiment (overrides, layers, !important). Utilisez les 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 vs beautify : même formateur, 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 scission est l’intention, pas un second algorithme. Les URL unminify ciblent une sortie de production compressée. Les URL beautify ciblent du 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 lance Prettier ou les language services JS/CSS, Format Document est la même classe d’opération : des blancs, pas des symboles. Utilisez FastMinify quand l’extrait vit dans un ticket, une réponse CDN, ou une machine sans votre profil d’éditeur. Aucun des deux chemins ne restaure les noms mangled.
Et ensuite
Déboguez le JS et le CSS minifiés dans cet ordre : source maps si elles existent, pretty-print dans DevTools si vous n’avez besoin que de la ligne qui plante, et un déminificateur navigateur seulement quand il vous faut une copie formatée et que les maps manquent. Les pages unminify et beautify de FastMinify réindentent avec js-beautify ; elles n’annulent pas le mangling. Pour le deep dive Chrome et maps, gardez le guide de débogage JavaScript. Pour formater du source déjà lisible au quotidien, utilisez les URL beautify.
Articles connexes

Désérialisez `wp_postmeta`, sessions PHP et caches Laravel en JSON lisible dans le navigateur — tableaux et scalaires uniquement, sans script local.

Stages, includes, règles `rules:` : validez la structure d'un .gitlab-ci.yml avant la pipeline — pas un runner GitLab, pas le CI Lint officiel.

YAML cassé, `on` ou `jobs` manquants, steps vides : validez la structure de vos workflows avant le push — et laissez actionlint à la CI.