🎨 Laravel Mix y gestión de assets
Compila, optimiza y organiza tus CSS y JavaScript con facilidad
Laravel Mix es una capa sobre webpack que simplifica la compilación y el manejo de assets (CSS, SASS, JS, imágenes). Con pocos comandos puedes transformar, concatenar, versionar y optimizar tus archivos para desarrollo y producción.
En esta entrada veremos la configuración básica, ejemplos reales (SASS → CSS, ES6 → ES5), versionado para cache-busting, y cómo integrar Mix con Laravel (y con Blade) paso a paso.
🔧 Requisitos previos
- Tener Node.js (v12+) y npm o Yarn instalados.
- Un proyecto Laravel ya creado (con
package.jsoninicial). - Conocimientos básicos de NPM scripts y archivos frontend.
package.json (fragmento)
{
"private": true,
"scripts": {
"dev": "npm run development",
"development": "mix",
"watch": "mix watch",
"hot": "mix watch --hot",
"prod": "npm run production",
"production": "mix --production"
},
"devDependencies": {
"laravel-mix": "^6.0.0",
"sass": "^1.32.0",
"sass-loader": "^10.1.1"
}
}
⚙️ Archivo webpack.mix.js
En la raíz del proyecto encontrarás (o crearás) webpack.mix.js. Aquí defines las tareas que Laravel Mix ejecutará.
webpack.mix.js
const mix = require('laravel-mix');
/*
|--------------------------------------------------------------------------
| Mix Asset Management
|--------------------------------------------------------------------------
|
| Mix simplifies Webpack configuration for common tasks like compiling
| SASS, bundling JS, versioning, copying assets and more.
|
*/
mix.js('resources/js/app.js', 'public/js')
.sass('resources/sass/app.scss', 'public/css')
.sourceMaps();
if (mix.inProduction()) {
mix.version();
}
Este ejemplo compila resources/js/app.js a public/js/app.js y SASS a CSS.
Además, en producción aplica versionado para cache-busting.
📁 Estructura típica de assets
resources/js/app.js→ punto de entrada JS (imports, Vue/React, etc.)resources/sass/app.scss→ variables y estilos principales (SASS)public/js/ypublic/css/→ archivos compilados para servirwebpack.mix.js→ configuración de Mix
resources/js/app.js (ejemplo)
// resources/js/app.js
import './bootstrap'; // file with axios, CSRF setup
import '../sass/app.scss';
console.log('App JS cargado');
// Ejemplo ES6
const saludo = (nombre = 'Alumno') => `¡Hola ${nombre}!`;
console.log(saludo('María'));
🎨 SASS: variables y uso
Ejemplo simple de resources/sass/app.scss con variables y mixins:
resources/sass/app.scss
// variables
$primary-color: #2b6cb0;
$radius: 6px;
body {
font-family: Arial, sans-serif;
background: #f8fafc;
color: #1a202c;
}
.btn-custom {
background: $primary-color;
color: #fff;
border-radius: $radius;
padding: 0.5rem 1rem;
}
Al compilar, estos SASS se convertirán a CSS compatible con todos los navegadores (según tu configuración).
📦 Comandos comunes
npm install→ instala dependencias.npm run dev→ compila para desarrollo (source maps).npm run watch→ recompila automáticamente al guardar archivos.npm run prod→ compila y optimiza para producción (minificación + version).
npm install npm run dev npm run watch npm run prod
🔁 Versionado (Cache-busting)
En producción conviene versionar los assets para forzar al navegador a cargar la versión nueva.
Mix ofrece mix.version() que genera nombres como app.css?id=abcd1234 o crea la carpeta mix-manifest.json.
En Blade
<!-- resources/views/layouts/app.blade.php -->
<link rel="stylesheet" href="{{ mix('css/app.css') }}">
<script src="{{ mix('js/app.js') }}" defer></script>
📂 Copiar activos estáticos
Mix también puede copiar carpetas completas (imágenes, fuentes) a public/:
mix.copyDirectory('resources/images', 'public/images');
mix.copyDirectory('resources/fonts', 'public/fonts');
🧪 Simulador visual: cómo se incluyen los assets
Selecciona si estás en desarrollo o producción y verás el enlace que deberías usar en Blade.
🛠️ Problemas comunes y soluciones
- No se ven los cambios: ejecuta
npm run devonpm run watch. - Error de compilación: revisa la versión de Node y dependencias, elimina
node_modulesy reinstala. - mix-manifest.json no coincide: limpia la caché del navegador o ejecuta
npm run prodpara regenear los archivos. - Problemas con SASS: asegura tener
sassysass-loaderendevDependencies.
✅ Buenas prácticas
- Usa
npm run watchen desarrollo para recompilación automática. - Versiona assets en producción (
mix.version()). - Separa lógica JS y CSS por componentes para mantener orden.
- Usa
mix.copyDirectorypara mantener imágenes y fuentes accesibles. - Revisa
mix.options({ processCssUrls: false })si tienes problemas con rutas en CSS.
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias