7-Creando un Layout Principal en Pug
Layout Principal en Pug: Organiza tu Proyecto de Bienes Raíces

En este tutorial, avanzaremos en nuestro proyecto BIENESRAICES_MVC implementando un layout principal con Pug. Esto nos permitirá reutilizar código en múltiples vistas (como login y registro) y mantener una estructura limpia y escalable.
1. Estructura del Proyecto
Antes de comenzar, revisemos la organización del proyecto:
BIENESRAICES_MVC/
├── controllers/
├── node_modules/
├── public/
│ ├── css/
│ │ ├── app.css
│ │ └── tailwind.css
│ ├── img/
│ └── js/
├── routes/
├── views/
│ ├── auth/
│ │ ├── login.pug
│ │ └── registro.pug
│ └── layout/
│ └── index.pug
├── package.json
└── tailwind.config.cjs2. ¿Por qué un Layout Principal?
En aplicaciones web, elementos como el header, footer o navbar se repiten en todas las páginas. Con Pug, podemos centralizarlos en un layout base y extenderlo en cada vista, evitando duplicar código.
Beneficios:
✅ Mantenibilidad: Cambios globales se aplican en un solo archivo.
✅ Consistencia: Diseño uniforme en todas las páginas.
✅ Eficiencia: Reduce líneas de código repetitivas.
3. Creando el Layout Base
Dentro de views/layout/index.pug, definimos la estructura común:
// views/layout/index.pug
doctype html
html(lang="es")
head
meta(charset="UTF-8")
meta(name="viewport" content="width=device-width, initial-scale=1.0")
title Bienes Raíces | #{pagina}
link(rel="stylesheet" href="/css/app.css")
body(class="min-h-screen bg-gray-50")
main(class="mx-auto container mt-10 px-2")
block contenidoblock contenido: Espacio reservado para que las vistas hijas inyecten su contenido único.Tailwind CSS: Usamos clases utilitarias para estilos básicos (fondo gris claro, contenedor centrado, etc.).
4. Extendiendo el Layout en las Vistas
Las vistas (como login.pug) heredan el layout y rellenan el bloque contenido:
// views/auth/login.pug
extends ../layout/index
block contenido
div
h2.text-center.text-2xl.font-extrabold Inicia Sesión¿Cómo funciona?
extends: Indica que la vista usa el layout principal.block contenido: Sobrescribe el bloque con el HTML específico de la página.
⚠️ Importante:
Los bloques deben ser lo primero en la vista (no puede haber código antes de
extends).Usa la ruta correcta (
../layout/indexpara subir un nivel de directorio).
5. Configuración Adicional
Extensiones Recomendadas para VSCode
Pug: Soporte para sintaxis y autocompletado.
Tailwind CSS IntelliSense: Sugiere clases de Tailwind al escribir.
Modo "Watch" para Tailwind
Para compilar automáticamente los estilos, modifica package.json:
"scripts": {
"dev": "tailwindcss -i ./src/css/app.css -o ./public/css/app.css --watch"
}Ejecuta con:
npm run devAhora, Tailwind actualizará los estilos en tiempo real al guardar cambios.
6. Resultado Final
Al acceder a /login, verás:
Título dinámico ("Bienes Raíces | Inicia Sesión").
Contenido específico centrado y con estilos de Tailwind.

Conclusión
Con este enfoque:
Centralizamos la estructura común en
layout/index.pug.Extendemos el layout en vistas hijas sin repetir código.
Optimizamos el flujo de trabajo con Tailwind (modo
--watch).
Creando un Layout Principal en Pug: Organiza tu Proyecto de Forma Eficiente
En este tutorial, continuaremos con nuestro proyecto y aprenderemos a crear un layout principal en Pug para estructurar nuestras vistas de manera modular. Esto nos permitirá reutilizar código y mantener un diseño consistente en todas las páginas.
¿Por qué usar un Layout Principal?
En proyectos web, es común que ciertos elementos (como headers, footers o barras de navegación) se repitan en múltiples páginas. Con Pug, podemos crear un layout base y extenderlo en cada vista, evitando duplicar código y facilitando las actualizaciones.
Paso 1: Estructura del Layout
Creamos una carpeta layout y dentro un archivo index.pug con la estructura base:
// layout/index.pug
doctype html
html(lang="es")
head
meta(charset="UTF-8")
meta(name="viewport" content="width=device-width, initial-scale=1.0")
title Bienes Raíces | #{pagina}
link(rel="stylesheet" href="/css/app.css")
body(class="min-h-screen bg-gray-50")
main(class="mx-auto container mt-10 px-2")
block contenidoblock contenido: Define un espacio dinámico que las vistas hijas podrán rellenar.Clases de Tailwind: Usamos clases utilitarias para estilos básicos (fondo gris claro, contenedor centrado, etc.).
Paso 2: Extender el Layout en las Vistas
Cada vista (como login.pug o registro.pug) heredará el layout y añadirá su contenido único:
// views/auth/login.pug
extends ../layout/index
block contenido
div
h2.text-center.text-2xl.font-extrabold Inicia Sesiónextends: Indica que la vista usa el layout principal.block contenido: Sobrescribe el bloque definido en el layout con el HTML específico de la página.
⚠️ Importante:
Todo el contenido debe estar dentro de un
block.Los bloques deben ser lo primero en la vista (no puede haber código antes de
extends).
Paso 3: Configuración Adicional
Extensiones Recomendadas para VSCode
Pug: Soporte para sintaxis y autocompletado.
Tailwind CSS IntelliSense: Sugiere clases de Tailwind mientras escribes.
Modo "Watch" para Tailwind
Para que los estilos se actualicen automáticamente, agrega en package.json:
"scripts": {
"dev": "tailwindcss -i ./src/css/app.css -o ./public/css/app.css --watch"
}Ejecuta con npm run dev. Ahora, cada cambio en tus clases se reflejará al guardar.
Resultado Final
Al acceder a /login, verás:
El título "Bienes Raíces" heredado del layout.
El contenido específico ("Inicia Sesión") inyectado en el bloque.

Conclusión
Usar layouts en Pug optimiza tu flujo de trabajo:
✅ Evita repetir código (DRY: Don’t Repeat Yourself).
✅ Facilita mantenimiento (cambios globales se aplican en un solo archivo).
✅ Integra Tailwind de manera eficiente con el modo "watch"
Automatizando la Compilación de CSS con Tailwind y Pug
El Problema: Cambios que no se Aplican
Al modificar clases de Tailwind en nuestros archivos Pug, es común que los cambios no se reflejen inmediatamente en el navegador. Esto ocurre porque:
Tailwind necesita recompilar el CSS cada vez que agregamos nuevas clases.
El archivo
app.cssno se actualiza automáticamente a menos que lo indiquemos.
La Solución: Modo Watch
Para evitar tener que recompilar manualmente cada cambio, configuraremos el modo watch en nuestro proyecto. Así, Tailwind observará los archivos y recompilará automáticamente cuando detecte modificaciones.
Paso 1: Configurar el Script en package.json
Abre tu package.json y modifica (o agrega) el script css:
"scripts": {
"css": "postcss public/css/tailwind.css -o public/css/app.css --watch"
}Paso 2: Ejecutar el Comando Watch
Ahora, en tu terminal, ejecuta:
npm run cssEsto iniciará el proceso en segundo plano y Tailwind estará atento a:
✅ Nuevas clases en archivos
.pug.✅ Cambios en
tailwind.config.cjs.✅ Cualquier modificación en los estilos.
¿Qué Logramos con Esto?
Automatización total: Ya no necesitas correr
npm run csscada vez que haces un cambio.Desarrollo más rápido: Los estilos se actualizan en tiempo real.
Menos errores: Evitas olvidar recompilar antes de probar los cambios.
Ejemplo Práctico
Si en login.pug modificas:
h2.text-center.text-6xl Inicia Sesiónpor:
h2.text-center.text-2xl.font-bold Inicia SesiónTailwind detectará el cambio al guardar el archivo y regenerará app.css sin que tengas que hacer nada más.
Conclusión
Configurar el modo --watch es esencial para un flujo de trabajo ágil con Tailwind y Pug. Con este ajuste:
🚀 Ahorras tiempo al evitar compilaciones manuales.
🛠 Trabajas más eficientemente con actualizaciones en vivo.
🔄 Mantienes consistencia en tus estilos sin esfuerzo.
¡Prueba este método y cuéntame cómo te va en los comentarios! ¿Tienes dudas sobre la configuración? Estoy aquí para ayudar. 👇
Comentarios
Publicar un comentario