Skip to content

02. Estructura del Proyecto

2.1 Carpetas principales: src, public, pages y components

Section titled “2.1 Carpetas principales: src, public, pages y components”

Un proyecto Astro sigue una estructura organizada y convencional que facilita el desarrollo y mantenimiento del código.

Propósito: Contiene todo el código fuente del proyecto

Subcarpetas principales:

src/pages/

  • Contiene las páginas del sitio
  • Cada archivo se convierte automáticamente en una ruta
  • Soporta .astro, .md, .mdx, .html
  • Sistema de routing basado en archivos

src/components/

  • Componentes reutilizables
  • Pueden ser .astro, .jsx, .vue, .svelte
  • No generan rutas automáticamente
  • Importables en páginas y otros componentes

src/layouts/

  • Plantillas para envolver páginas
  • Define estructura común (header, footer)
  • Reutilización de diseño
  • Usa <slot /> para contenido dinámico

src/styles/

  • Estilos globales
  • Variables CSS
  • Mixins y utilidades
  • Importables en cualquier componente

Propósito: Archivos estáticos que se copian directamente al build

Contenido típico:

  • Imágenes (favicon.svg, logos)
  • Fuentes personalizadas
  • Archivos robots.txt, sitemap.xml
  • Documentos PDF, archivos descargables

Características:

  • No se procesan ni optimizan
  • Accesibles desde la raíz (/)
  • No requieren import
  • Ideales para assets que no cambian

src/content/

  • Content Collections
  • Archivos Markdown/MDX organizados
  • Validación con esquemas Zod
  • Ideal para blogs, documentación

src/assets/

  • Imágenes que se optimizan
  • Requieren import
  • Procesadas por Astro
  • Generan múltiples formatos
Aspectopublic/src/assets/
ProcesamientoNo
OptimizaciónNo
ImportNo necesarioRequerido
URL/archivo.jpgGenerada
UsoAssets estáticosImágenes optimizadas

Los archivos .astro son la unidad fundamental de Astro, combinando HTML, CSS y JavaScript en un solo archivo con una sintaxis especial.

Tres secciones principales:

1. Frontmatter (---)

  • Código JavaScript/TypeScript que se ejecuta en el servidor
  • Delimitado por --- al inicio y final
  • Importaciones, lógica, fetch de datos
  • No se envía al cliente

2. Template (HTML)

  • Sintaxis similar a JSX
  • Puede usar variables del frontmatter
  • Expresiones con {}
  • Componentes con <Component />

3. Estilos (opcional)

  • Tag <style> para CSS
  • Scoped por defecto
  • Soporta preprocesadores (Sass, Less)
  • Puede ser global con is:global

Proceso de Renderizado:

  1. Build Time: Frontmatter se ejecuta en el servidor
  2. Generación: Se produce HTML estático
  3. Optimización: CSS se extrae y minimiza
  4. Output: HTML puro sin JavaScript (por defecto)

Características Especiales:

Props

  • Recibir datos de componentes padres
  • Acceso via Astro.props
  • Type-safe con TypeScript
  • Validación en tiempo de desarrollo

Slots

  • Insertar contenido dinámico
  • Similar a children en React
  • Slots nombrados para múltiples áreas
  • Flexibilidad en layouts

Directivas

  • class:list: Clases condicionales
  • set:html: Insertar HTML raw
  • is:global: Estilos globales
  • define:vars: Variables CSS dinámicas
Aspecto.astro.jsx.vue
SintaxisHTML-likeJSXSFC
CSSScoped nativoCSS-in-JSScoped
JavaScriptFrontmatterTodo el archivo<script>
RenderizadoServidorCliente/ServidorCliente/Servidor

2.3 Sistema de rutas y navegación en Astro

Section titled “2.3 Sistema de rutas y navegación en Astro”

Astro utiliza un sistema de routing automático basado en la estructura de archivos en la carpeta src/pages/.

Mapeo Archivo → URL

  • src/pages/index.astro/
  • src/pages/about.astro/about
  • src/pages/blog/index.astro/blog
  • src/pages/blog/post.astro/blog/post

Parámetros de Ruta

  • Archivos con [param].astro
  • Generación con getStaticPaths()
  • Acceso via Astro.params
  • Build time generation

Tipos de Parámetros:

  • Simple: [id].astro/123
  • Múltiple: [category]/[id].astro/tech/123
  • Rest: [...path].astro/any/nested/path
TipoSintaxisEjemploURL
Estáticapage.astroabout.astro/about
Dinámica[param].astro[id].astro/123
Rest[...path].astro[...slug].astro/any/path
Índiceindex.astroblog/index.astro/blog

Propósito: Generar rutas dinámicas en build time

Características:

  • Retorna array de objetos
  • Cada objeto tiene params y props
  • Se ejecuta solo durante el build
  • Genera todas las páginas posibles

Enlaces Internos

  • Tag <a> estándar
  • Rutas relativas o absolutas
  • Prefetching automático (opcional)
  • Sin recarga de página completa

Redirecciones

  • Configuración en astro.config.mjs
  • Código de estado personalizable
  • Útil para URLs antiguas
🐝