Fluxom
8 min de lectura

Cómo minificar JavaScript sin romper tu código

Qué hace realmente la minificación, qué riesgos tiene y cómo usar el JS Minifier de Fluxom con seguridad, incluyendo sus límites y cuándo usar terser o esbuild.

Qué es minificar y por qué se hace

Minificar es reducir el tamaño de un archivo de código sin cambiar lo que hace. El navegador no necesita comentarios, sangrías ni nombres de variable descriptivos: son ayudas para las personas. Quitarlos hace que el archivo pese menos, se descargue antes y la página cargue más rápido, algo especialmente importante en conexiones móviles.

El ahorro depende del código. En un archivo muy comentado y con mucha sangría, la diferencia es grande. En un archivo que ya es compacto, es pequeña. Y conviene recordar que el servidor suele enviar los archivos comprimidos con gzip o Brotli, que ya eliminan buena parte de la redundancia: la minificación y la compresión se complementan, pero la segunda hace gran parte del trabajo.

Los tres niveles de minificación

No todas las minificaciones son iguales. Se pueden distinguir tres niveles, de menor a mayor agresividad:

  1. Limpieza de espacios y comentarios. Elimina saltos de línea sobrantes, sangrías y comentarios. Es seguro en casi todos los casos.
  2. Renombrado de variables (mangling). Cambia precioTotal por a. Ahorra mucho, pero exige entender el código completo para no romper referencias.
  3. Optimización del código (compress). Simplifica expresiones, elimina código inalcanzable y reordena instrucciones. Es lo que hacen las herramientas de empaquetado.

El JS Minifier de Fluxom se queda deliberadamente en el nivel uno. Es una decisión de diseño: una herramienta rápida de navegador no puede analizar tu proyecto entero, así que prefiere no arriesgar.

Qué hace exactamente el JS Minifier de Fluxom

La herramienta recorre el texto y aplica tres reglas: elimina los comentarios de una línea (//) y de varias líneas (/* */), respeta el contenido de las cadenas y de las plantillas con comillas invertidas, recorta los espacios al principio y al final de cada línea y descarta las líneas vacías.

Un ejemplo real. Este código de entrada:

// Suma con IVA
function total(precio, iva) {
    /* iva en porcentaje */
    const factor = 1 + iva / 100;

    return precio * factor; // resultado
}
const url = "https://fluxom.app"; // no se toca dentro de strings
console.log(total(100, 21), url);

produce esta salida:

function total(precio, iva) {
const factor = 1 + iva / 100;
return precio * factor;
}
const url = "https://fluxom.app";
console.log(total(100, 21), url);

Observa que la URL de la cadena (//fluxom.app) no se confunde con un comentario, y que cada instrucción sigue en su propia línea. Esto último es clave para la seguridad, como se explica a continuación.

Los riesgos reales de minificar

Cuando una minificación rompe un programa, casi siempre es por uno de estos motivos:

  • Inserción automática de punto y coma. JavaScript permite omitir algunos puntos y coma, porque el lenguaje los inserta al final de línea. Si un minificador junta líneas sin cuidado, puede cambiar el significado. Por ejemplo, const a = 1 y const b = 2 en líneas separadas son válidas, pero unidas como const a = 1 const b = 2 provocan un error. Por eso el minificador de Fluxom conserva los saltos de línea.
  • Literales de expresión regular. Es la limitación conocida de esta herramienta, y se explica en la sección siguiente.
  • Nombres usados por reflexión. Si tu código depende de nombreDeFuncion.name, de eval o de propiedades accedidas como cadenas, el renombrado de variables lo rompe.
  • Comentarios con licencia. Algunas licencias exigen conservar un aviso al inicio del archivo. Una minificación sin cuidado lo elimina.
  • Depurar sin mapa de código. El archivo minificado es ilegible en la consola. Los mapas de origen (source maps) resuelven esto.

Una limitación que conviene conocer

El minificador de Fluxom no analiza la gramática completa del lenguaje, así que no distingue una expresión regular de una división. Si una regex contiene dos barras seguidas, como en una que busca ://, puede interpretarse como el inicio de un comentario. Este código:

const re = /https?:\/\//;
console.log(re.test("https://a.com"));

se estropea, porque la herramienta corta la primera línea justo en la secuencia de barras. Si tu fragmento contiene literales regex con // o /*, tienes tres opciones: construirlos con new RegExp("https?://"), minificar a mano esa parte, o usar una herramienta con análisis real del código.

Cuándo usar terser o esbuild

Para código de producción, lo recomendable es integrar la minificación en tu proceso de construcción, donde la herramienta ve todo el proyecto. Dos opciones muy extendidas son terser y esbuild, y se pueden probar desde la terminal:

npx terser app.js --compress --mangle -o app.min.js
npx esbuild app.js --minify --outfile=app.min.js

Frameworks como Next.js, Vite o Webpack ya incluyen minificación al construir para producción. El minificador de Fluxom encaja en otros casos: reducir un script pequeño que vas a pegar en una página, preparar un fragmento para un correo o una plantilla, o comprobar rápidamente cuánto pesa un código sin comentarios. Si el resultado te parece demasiado denso para leerlo, el JS Beautifier hace el camino inverso y vuelve a darle sangría.

Lista de comprobación antes de publicar

Antes de subir código minificado, repasa estos puntos:

  1. Conserva siempre el archivo original: la minificación es de ida, no de vuelta.
  2. Ejecuta las pruebas con la versión minificada, no solo con la original.
  3. Genera y publica mapas de origen si quieres depurar errores en producción.
  4. Mantén los avisos de licencia que lo exijan.
  5. Comprueba el tamaño final ya comprimido, que es el que realmente viaja por la red.
  6. Verifica en el navegador que no aparecen errores nuevos en la consola.

La minificación es una de las optimizaciones con mejor relación esfuerzo-beneficio, siempre que se haga con cuidado. Empieza por el nivel seguro, mide el resultado y sube de nivel solo cuando tengas pruebas que respalden el cambio.

Prueba el minificador con tu código

Pega un fragmento, pulsa Minificar y compara el resultado con el original.