
Desminificar JS y CSS: depurar código minificado en producción
Traces ilegibles y maps ausentes: JS y CSS legibles en el navegador con unminify y beautify — solo formato, nombres mangled perdidos.
Cuando el JS y el CSS de producción caben en una línea ilegible
Un stack trace que apunta a app.min.js:1:18432, o una hoja de estilos de una sola línea de 40 KB, es primero un problema de formato — no de descompilador. La minificación quitó espacios y comentarios. El mangling (Terser mangle, compresión de identificadores de cssnano si está activa) renombró símbolos. El pretty-print restaura la forma. Solo una source map restaura los nombres originales. Cuando faltan las maps y necesitas una copia local, el desminificador JavaScript en línea y el desminificador CSS en línea reindentan en el navegador. No suben el payload. No deshacen el mangling. Para el recorrido DevTools y source maps solo de JavaScript, conserva la guía para depurar JavaScript minificado — este artículo es el flujo de las páginas de herramientas JS y CSS.
Cuándo unminify es el clic correcto — y cuándo no
La guía de depuración de JavaScript minificado es el deep dive: pretty-print de Chrome, sourceMappingURL, maps hidden, y por qué a nunca volverá a ser getUserProfile sin map. Este texto no repite esa visita a DevTools. Responde a otra búsqueda: ya tienes un recorte JS o CSS minificado (ticket, copia CDN, archivo de tema) y quieres las páginas FastMinify que lo formatean. Los formateadores de la familia están en el hub de herramientas unminify.
Unminify y beautify en FastMinify reindentan. No son descompiladores. Trata estos límites como duros — coinciden con lo que hacen las herramientas (js-beautify en la pestaña, tamaño de indent y espacios vs tabuladores, comprobación de sintaxis primero).
Limitaciones:
Qué funciona:
Flujo: primero maps, luego pretty-print, luego las páginas de herramientas
Sigue este orden. Las páginas desminificar JavaScript y desminificar CSS son el paso 3, cuando faltan las maps y necesitas una copia formateada.
1Busca una source map
En DevTools → Sources, busca archivos originales junto al bundle, un vecino .map, o un comentario //# sourceMappingURL= (JS) / /*# sourceMappingURL= (CSS). Si carga una map, depura ahí y para. Ningún formateador gana a los nombres originales.
2Pretty-print en el navegador o el editor
Chrome Sources: el control {} Pretty Print formatea el archivo in situ. VS Code: Format Document sobre un .min.js o .min.css guardado. El mismo límite: los nombres siguen mangled. Para un bug de cascada CSS, pretty-print más el panel Styles suele ganar a copiar el archivo fuera.
3Desminifica en local solo si quieres una copia archivo
Sin map, y quieres fuente indentada en disco o en un ticket: pega el JS en el desminificador JavaScript o el CSS en el desminificador CSS. El procesamiento se queda en el navegador. Tamaño y carácter de indent son controles de forma — no un desofuscador.
4Navega con literales, no con nombres
Busca cadenas únicas, URLs, tokens de color y mensajes de error. Sigue patrones if / return / @media. No esperes a que a vuelva a ser un identificador real.
Ejemplo:
Antes (minificado):
Después (desminificado):
Lo que recuperas: forma legible, no el source original
Pega una IIFE de una línea o un trozo de bundle Terser. El desminificador JavaScript ejecuta js-beautify en el navegador tras una comprobación de sintaxis. Obtienes wrapping e indent. No obtienes los nombres anteriores al mangle. El !0 del ejemplo es deliberado: muchos minificadores reescriben true así, y el formato no lo convierte de nuevo en true.
Antes
Después
{} de Chrome, quédate en la guía de depuración JSEl CSS comprimido suele ser una línea con selectores pegados. El desminificador CSS formatea con js-beautify: selectores en sus líneas, declaraciones indentadas, bloques @media anidados visualmente. Especificidad y cascada no cambian — solo los espacios. Si una regla «desaparece» tras formatear, ya no se aplicaba; el formato no la borró.
Antes
Después
.9 se quedan cortos; no es una herramienta «expand to longhand»Usar las páginas unminify: dos bucles concretos
Abre el desminificador JavaScript. Pega un solo recorte (una función, un chunk de webpack, un bookmarklet). Pulsa Unminify. La salida queda indentada a la derecha. Cópiala al editor y busca una cadena única del stack trace. Todo se queda en la pestaña.
Paso 1: copia el archivo que falla, no la página HTML
Desde DevTools → Network o Sources, guarda el .js que nombra la traza. Pegar todo el documento HTML en un desminificador JS hará fallar la comprobación de sintaxis.
Paso 2: pega en unminify-js
Deja el indent en 2 espacios salvo que el equipo use tabuladores. Si ves un error de sintaxis, el pegado está truncado o mezclado con HTML — corrige el pegado, no bajes el listón de la herramienta.
Paso 3: busca literales y vuelve a DevTools
Encuentra el mensaje de error o la URL. Anota el flujo de control alrededor. Haz pretty-print del archivo en vivo en Chrome si aún necesitas breakpoints — una copia formateada en disco no sustituye una pila de llamadas en pausa.
Abre el desminificador CSS. Pega la hoja comprimida (o el recorte que contiene el selector). Tras formatear, busca la clase del DOM. Compara con Computed de DevTools: el formato no cambia qué regla gana.
Paso 1: copia la hoja de estilos, no el HTML minificado
Panel Network → la petición .css. Los bloques <style> inline también se pegan si solo contienen CSS válido.
Paso 2: desminifica y busca la clase o el id
Una lista de selectores como .btn,.cta se separa en dos líneas. Es legibilidad, no un cambio de cascada.
Paso 3: quédate con el panel Styles para la verdad
El archivo formateado dice lo que se entregó. El panel Styles dice lo que realmente aplica (overrides, layers, !important). Usa ambos.
En ambas páginas unminify, el tamaño y el carácter de indent son los controles de formato. Minify los ignora. No hay un interruptor «restaurar nombres originales». Para el resto de la familia (HTML, JSON, XML), véase el hub de herramientas unminify.
Unminify vs beautify: el mismo formateador, distinta intención de búsqueda
En FastMinify, desminificar JavaScript y embellecer JavaScript formatean ambos con js-beautify tras una comprobación de sintaxis. El mismo par existe para CSS: desminificar CSS y embellecer CSS en línea. La división es la intención, no un segundo algoritmo. Las URL unminify apuntan a salida de producción comprimida. Las URL beautify apuntan a fuente que ya consideras legible pero quieres indentar de forma uniforme. El recorrido más largo de formateadores es la guía del code beautifier.
Si el archivo ya está en disco y el equipo usa Prettier o los language services JS/CSS, Format Document es la misma clase de operación: espacios, no símbolos. Usa FastMinify cuando el recorte vive en un ticket, una respuesta CDN o una máquina sin tu perfil de editor. Ningún camino restaura nombres mangled.
Qué hacer después
Depura JS y CSS minificados en este orden: source maps si existen, pretty-print en DevTools si solo necesitas la línea que falla, y un desminificador en el navegador solo cuando necesitas una copia formateada y faltan las maps. Las páginas unminify y beautify de FastMinify reindentan con js-beautify; no deshacen el mangling. Para el deep dive de Chrome y maps, conserva la guía de depuración JavaScript. Para formatear a diario fuente ya legible, usa las URL beautify.
Artículos relacionados

Deserializa `wp_postmeta` de WordPress, sesiones PHP y caches Laravel a JSON legible en el navegador — solo arrays y escalares, sin script local.

Stages, includes, `rules:`: valida la estructura de un .gitlab-ci.yml antes del pipeline — no es un runner de GitLab ni el CI Lint oficial.

YAML roto, `on` o `jobs` ausentes, steps vacíos: valida la estructura de tus workflows antes del push — y deja actionlint para la CI.