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
- Organizar la estructura src/ y dist/ clara y consistente.
- Versionar el código Gulp en tu control de versiones.
- Probar cambios de optimización en distintos navegadores.
- 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.
11. Recursos adicionales
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 🙂 |