Cómo minificar assets con Gulp

Contents

Cómo minificar assets con Gulp

Última actualización: 2024

1. Introducción

En proyectos web modernos, optimizar y reducir el tamaño de los assets (CSS, JavaScript, imágenes) es fundamental para mejorar el rendimiento y la experiencia de usuario. Gulp es un gestor de tareas streaming que permite automatizar procesos de construcción y optimización de manera sencilla y eficiente. En este artículo presentaremos un flujo de trabajo completo para minificar y optimizar recursos utilizando Gulp.

2. Requisitos previos

  • Node.js (>= 14.x): https://nodejs.org/
  • Conocimientos básicos de la línea de comandos
  • Conceptos básicos de CSS, JavaScript y optimización web

3. Instalación de Gulp

Ejecuta los siguientes comandos para instalar Gulp globalmente y como dependencia de desarrollo del proyecto:

npm install --global gulp-cli
npm install --save-dev gulp

4. Estructura básica de gulpfile.js

En la raíz del proyecto crea un archivo gulpfile.js:

const { src, dest, series, parallel, watch } = require(gulp)
// Plugins
const cleanCSS    = require(gulp-clean-css)
const uglify      = require(gulp-uglify)
const imagemin    = require(gulp-imagemin)
const sourcemaps  = require(gulp-sourcemaps)
const rename      = require(gulp-rename)

5. Plugins esenciales

Plugin Función NPM
gulp-clean-css Minificar CSS gulp-clean-css
gulp-uglify Minificar JavaScript gulp-uglify
gulp-imagemin Optimizar imágenes gulp-imagemin
gulp-sourcemaps Generar mapas de origen gulp-sourcemaps
gulp-rename Renombrar archivos gulp-rename

6. Tareas de minificación

6.1. Minificar CSS

function cssMinify() {
  return src(src/css/.css)
    .pipe(sourcemaps.init())
    .pipe(cleanCSS({ level: 2 }))
    .pipe(rename({ suffix: .min }))
    .pipe(sourcemaps.write(.))
    .pipe(dest(dist/css))
}

6.2. Minificar JS

function jsMinify() {
  return src(src/js/.js)
    .pipe(sourcemaps.init())
    .pipe(uglify())
    .pipe(rename({ suffix: .min }))
    .pipe(sourcemaps.write(.))
    .pipe(dest(dist/js))
}

6.3. Optimizar imágenes

function imageOptimize() {
  return src(src/images//)
    .pipe(imagemin([
      imagemin.mozjpeg({ quality: 75, progressive: true }),
      imagemin.optipng({ optimizationLevel: 5 })
    ]))
    .pipe(dest(dist/images))
}

7. Watchers y tareas en paralelo

Para automatizar y recompilar cuando haya cambios:

function watchFiles() {
  watch(src/css//.css, cssMinify)
  watch(src/js//.js, jsMinify)
  watch(src/images//, imageOptimize)
}

exports.build = series(
  parallel(cssMinify, jsMinify, imageOptimize)
)

exports.default = series(
  exports.build,
  watchFiles
)

8. Optimización avanzada

  • Concatenación: Unir múltiples archivos antes de minificar con gulp-concat.
  • Cache busting: Añadir hashes en los nombres de archivo con gulp-rev y gulp-rev-rewrite.
  • Purga de CSS no usado: Eliminar CSS no referenciado con gulp-purgecss.
  • Integración con BrowserSync: Recarga en vivo del navegador durante el desarrollo.

9. Buenas prácticas

  1. Organizar la estructura src/ y dist/ clara y consistente.
  2. Versionar el código Gulp en tu control de versiones.
  3. Probar cambios de optimización en distintos navegadores.
  4. Automatizar con Continuous Integration y despliegue tras la compilación.

10. Resolución de problemas comunes

  • Error de sintaxis: Verificar que las rutas de archivos existan y los plugins estén correctamente importados.
  • Archivos no minificados: Asegurarse de usar return en las funciones y encadenar los pipes adecuadamente.
  • Performance lenta: Excluir la carpeta node_modules de los watchers y optimizar sólo archivos relevantes.

Artículo elaborado por un especialista en optimización web. Mantén tu flujo de trabajo ágil y eficiente con Gulp para ofrecer siempre la mejor velocidad de carga.



Acepto donaciones de BAT's mediante el navegador Brave 🙂



Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *