Beautifier JavaScript

Formatea JS minificado o desordenado con sangría legible en el navegador.

Descripción

Recibir un archivo JavaScript minificado sin el source map correspondiente es uno de los momentos más frustrantes en la vida de un desarrollador. Una sola línea de ochenta mil caracteres que aloja trescientas funciones distintas no es código: es una secuencia de caracteres que el intérprete de la máquina entiende, pero que un ser humano no puede leer. Esto ocurre con bibliotecas de terceros, scripts de tracking y, no pocas veces, con el propio código de un proyecto cuando el source map fue eliminado o nunca se generó.

El beautifier invierte ese proceso: añade indentación, divide las expresiones largas en varias líneas y restaura la estructura visual que el minificador descartó. No recupera los nombres originales de las variables —eso es imposible sin el source map—, pero transforma `function a(b,c){if(b>c){return b}return c}` en algo con sangría de dos espacios y saltos de línea que el ojo humano puede escanear. No es tan elegante como el original, pero es funcional para depurar.

Los source maps son archivos .map que establecen la correspondencia entre el código minificado y el código original. Cuando el navegador encuentra un source map (referenciado por un comentario `//# sourceMappingURL=` al final del archivo), las devtools muestran el código original durante la depuración. La mayoría de los bundlers modernos —Vite, webpack, Rollup— generan source maps automáticamente en modo desarrollo. Sin embargo, en producción los source maps suelen omitirse por seguridad (para no exponer la lógica original al público) o por rendimiento (son archivos voluminosos). Es exactamente en esos casos cuando un beautifier en línea marca la diferencia.

Detalle técnico

Source maps: el eslabón perdido entre código minificado y original

  • Un archivo source map (.map) es un JSON que mapea cada posición del código minificado de vuelta al archivo y la línea correspondiente en el código original. Sin él, un stack trace que apunta a `bundle.min.js:1:38492` no dice absolutamente nada útil.
  • El comentario `//# sourceMappingURL=bundle.min.js.map` al final del archivo minificado indica al navegador que cargue el source map. Las devtools muestran entonces el código original, con los nombres reales de variables y funciones, durante la sesión de depuración.
  • En desarrollo, los bundlers generan source maps automáticamente. Vite, webpack y Rollup tienen opciones dedicadas: `devtool: 'source-map'` en webpack, `build.sourcemap: true` en Vite.
  • En producción, los source maps suelen omitirse por dos razones: seguridad (exponen la lógica interna al público) y tamaño (un source map puede ser más grande que el propio bundle). La alternativa es subir los source maps solo a un servidor de monitoreo de errores como Sentry.
  • Cuando no existe source map y el código está minificado, el beautifier es el único recurso disponible. No restaura los nombres originales de las variables, pero al menos hace el código estructuralmente legible.

Cuándo un beautifier es realmente indispensable

  • Bibliotecas de terceros distribuidas sin source map: jQuery, scripts de analítica, widgets de chat, píxeles de rastreo. Estos archivos llegan minificados y sin ninguna documentación de su estructura interna.
  • Depuración de problemas en producción cuando los source maps fueron eliminados del despliegue por política de seguridad de la empresa. El error aparece en el log, pero el código minificado es ilegible.
  • Auditorías de seguridad: cuando necesitas entender qué hace realmente un script de terceros antes de incluirlo en tu sitio. El beautifier hace posible una lectura rápida de la lógica.
  • Código legado sin historial de versiones: archivos .js antiguos en los que el código fuente original se perdió y solo queda la versión minificada en el servidor de producción.
  • Comparación de versiones: cuando necesitas entender qué cambió entre dos versiones minificadas de una biblioteca, un diff entre los archivos embellecidos es mucho más legible que un diff entre las versiones minificadas.

Guía de la herramienta

  • Qué hace Toma JavaScript minificado o desordenado y aplica saltos de línea e indentación legibles.

  • Cuándo usarlo Depuración rápida, inspección de snippets y revisión antes de refactorizar.

Fragmentos de Código

Generar source map con esbuild (CLI)
# Empaquetar y minificar con source map externo
esbuild src/app.js \
  --bundle \
  --minify \
  --sourcemap \
  --outfile=dist/app.min.js

# Resultado:
# dist/app.min.js         (bundle minificado)
# dist/app.min.js.map     (source map externo)

# El archivo minificado terminará con:
# //# sourceMappingURL=app.min.js.map

# Para source map inline (no recomendado en producción):
esbuild src/app.js --bundle --minify --sourcemap=inline --outfile=dist/app.min.js
Generar source map con webpack (configuración)
// webpack.config.js
module.exports = {
  mode: 'production',
  entry: './src/app.js',
  output: {
    filename: 'bundle.min.js',
    path: __dirname + '/dist',
  },

  // 'source-map': archivo .map separado (recomendado para producción)
  // 'eval-source-map': inline, solo desarrollo
  // 'hidden-source-map': genera el .map pero omite el comentario
  //   (útil para Sentry sin exponer los mapas al público)
  devtool: 'source-map',
};

// Para Vite, en vite.config.js:
// export default { build: { sourcemap: true } }

Entrada común

function hello(){const x=1;if(x){console.log('ok');}}

Preguntas frecuentes

¿Para qué sirve esta herramienta?

Funciona por completo en tu navegador: sirve para validar, formatear o convertir datos en el día a día.

¿Se envían mis datos a algún servidor?

El procesamiento es local con JavaScript. No almacenamos lo que pegas en los campos de texto.

¿Puedo usarlo con datos reales en producción?

Úsalo bajo tu responsabilidad. Para secretos (contraseñas, tokens), prefiere entornos controlados y políticas internas. Recuerda de revisar los contenidos generados. Nunca confies ciegamente en cosas que ves en internet.