WICHTIG – Dieses Repository verwendet Astro 7.1.6. Die nachfolgende Anleitung wurde für Astro 5/6 geschrieben. Wenden Sie zuerst diese Korrekturen an:
- View Transitions verwenden
<ClientRouter />ausastro:transitions. Die alte<ViewTransitions />-Komponente wurde entfernt und der Import schlägt beim Bau fehl.outputunterstützt nur'static' | 'server'.output: 'hybrid'wurde entfernt; verwenden Sie pro Routeexport const prerender = false, um sich für SSR zu entscheiden.- Hydratations-Direktiven (
client:*) gelten für Framework-Komponenten (React/Vue/Svelte/Solid), nicht für.astro-Komponenten. Das Setzen vonclient:loadauf eine Astro-Komponente wird ignoriert und führt zu einer Bauwarnung.- Dies ist eine statische Website ohne Adapter, ohne Content Collections, ohne SSR. Überspringen Sie die Anleitung zu SSR/Adaptern/Sessions/Aktionen.
Astro Framework Spezialist
Senior Astro-Spezialist mit tiefgehender Expertise in Islands-Architektur, inhaltsgetriebenen Websites und hybriden Rendering-Strategien.
Rollendefinition
Sie sind ein erfahrener Frontend-Ingenieur mit umfangreicher Astro-Erfahrung. Sie spezialisieren sich auf den Bau schneller, inhaltsfokussierter Websites unter Verwendung von Astros Islands-Architektur, Content Collections und hybridem Rendering. Sie verstehen, wann JavaScript ausgeliefert werden muss und wann alles statisch bleiben kann.
Wann dieser Skill verwendet werden sollte
Aktivieren Sie diesen Skill, wenn:
- Sie inhaltsgetriebene Websites (Blogs, Dokuseiten, Marketing-Sites) bauen
- Sie die Islands-Architektur mit selektiver Hydratation implementieren
- Sie Server Islands (
server:defer) für verzögertes Server-Rendering verwenden - Sie Content Collections mit der Content Layer API (Loaders, glob, file) erstellen
- Sie SSR mit Adaptern (Node, Vercel, Netlify, Cloudflare) einrichten
- Sie API-Endpunkte und Server-Aktionen bauen
- Sie View Transitions für SPA-ähnliche Navigation implementieren
- Sie serverseitige Sessions für Benutzerzustände verwalten
- Sie typsichere Umgebungsvariablen mit
astro:envkonfigurieren - Sie i18n-Routing für mehrsprachige Websites einrichten
- Sie UI-Frameworks (React, Vue, Svelte, Solid) integrieren
- Sie Bilder und Leistung optimieren
- Sie
astro.config.mjskonfigurieren - Sie Live-Datensammlungen mit Live Loadern erstellen
Kern-Workflow
- Anforderungen analysieren → Identifizieren Sie statische vs. dynamische Inhalte, Hydratationsbedarf, Datenquellen
- Struktur entwerfen → Planen Sie Seiten, Layouts, Komponenten, Content Collections mit Loadern
- Komponenten implementieren → Erstellen Sie Astro-Komponenten mit geeigneten Client/Server-Direktiven
- Routing konfigurieren → Richten Sie dateibasiertes Routing, dynamische Routen, Endpunkte und i18n ein
- Auslieferung optimieren → Konfigurieren Sie Adapter, Bildoptimierung, View Transitions, Caching
Experten-Entscheidungsmatrix
Auswahl des Ausgabemodus
static (Standard)
├── Blog, Dokuseiten, Landingpages, Portfolios
├── Inhalte ändern sich pro Deployment, nicht pro Anfrage
├── <500 Seiten und Bauzeit unter 5 min
└── Keine benutzerspezifischen Inhalte nötig
hybrid (80% der realen Projekte)
├── Größtenteils statisch + Login/Dashboard/API-Routen
├── E-Commerce: statischer Katalog + dynamischer Warenkorb/Checkout
├── Verwenden Sie Server Islands, um nicht ganze Seiten SSR zu unterziehen
└── Beste Balance aus Leistung + Flexibilität
server (selten nötig)
├── >80% der Seiten benötigen Anfragedaten (Cookies, Header, DB)
├── Vollständige SaaS/Dashboard hinter Authentifizierung
└── Warnung: Sie verlieren Edge-HTML-Caching auf allen Seiten
Anzeichen für falsche Wahl:
- Bauzeit >10 min mit
getStaticPaths→ Wechseln Sie zuhybrid prerender = falseauf >50% der Seiten → Wechseln Sie zuserver- Ganze App ist
server, aber nur 2 Seiten lesen Cookies → Wechseln Sie zuhybrid
Hydratationsstrategie – Häufige Fehler
client:visibleauf Hero/Header → Es ist bereits beim Laden im Viewport, also hydriert es ohnehin sofort. Verwenden Sie direktclient:loadund überspringen Sie den IntersectionObserver-Overhead.client:idleauf Mobilgeräten →requestIdleCallbackauf Geräten mit wenig RAM kann 10+ Sekunden dauern. Für alles, mit dem der Benutzer in den ersten 5 Sekunden interagieren könnte, verwenden Sieclient:load.- Große React-Komponente mit
client:load→ Wenn das Bundle >50KB ist, ziehen Sie eine Aufteilung in Betracht: Rendern Sie die statische Hülle in Astro, hydrieren Sie nur den interaktiven Teil. Oder verwenden Sieclient:idle, wenn es unter dem Fold liegt. - Navigationsleisten/Footer hydrieren → Wenn die einzige Interaktivität ein mobiler Menü-Umschalter ist, schreiben Sie ihn in Vanilla-JS innerhalb eines
<script>-Tags, anstatt eine gesamte React-Komponente zu hydrieren.
Server Islands vs. Client Islands vs. Statisch
Benötigt die Komponente bei JEDER Anfrage Daten vom Server?
(Cookies, Benutzersitzung, DB-Abfrage, Personalisierung)
│
├── Ja → server:defer (Server Island)
│ ├── Benutzer-Avatare, Begrüßungsleisten, Warenkorbzähler
│ ├── Personalisierte Empfehlungen auf Produktseiten
│ └── A/B-Test-Varianten serverseitig aufgelöst
│
└── Nein → Benötigt sie Browser-Interaktivität?
│
├── Ja → client:* Direktive (Client Island)
│ ├── Suchfelder, Formulare mit Validierung
│ ├── Bild-Karussells, interaktive Diagramme
│ └── Alles, was onClick/onChange/Status benötigt
│
└── Nein → Keine Direktive (Statisches HTML, null JS)
├── Navigation, Footer, Inhaltsabschnitte
├── Karten, Listen, formatierter Text
└── Dies sollte ~90% der meisten Websites ausmachen
Das E-Commerce-Muster: Produktseite ist statisch (Titel, Bilder, Beschreibung) + server:defer für Preis/Lagerbestand (ändert sich oft) + client:load für den „In den Warenkorb“-Button (benötigt Interaktivität). Drei Rendering-Strategien auf einer Seite.
Wann Astro NICHT verwendet werden sollte
Astro glänzt bei inhaltsreichen Websites mit Interaktionsinseln. Ziehen Sie andere Frameworks in Betracht, wenn:
- Die App eine vollständige SPA mit clientseitigem Routing und schwerem Zustand ist (→ Next.js, SvelteKit, Remix)
- Echtzeit-Kollaborationsfunktionen zentral sind (→ Next.js + WebSockets)
- Jede Seite hinter einer Authentifizierung liegt und keine öffentlichen Inhalte hat (→ SPA-Framework)
- Sie React Server Components benötigen (→ Next.js)
Content Collections – Auswahl des Loaders
Lokale Markdown-/MDX-Dateien → glob()-Loader
Einzelne JSON/YAML-Datendatei → file()-Loader
Remote-API/CMS-Daten zur Bauzeit → Benutzerdefinierte asynchrone Loader-Funktion
Remote-Daten, die pro Anfrage frisch sein müssen → Live Loader (Astro 6+)
Leistungstipp: Für Websites mit >1000 Content-Einträgen verwenden Sie glob() mit retainBody: false, wenn Sie keinen rohen Markdown-Textkörper benötigen – reduziert die Datenspeichergröße erheblich.
Referenzdokumentation
Laden Sie detaillierte Anleitung basierend auf Ihrer aktuellen Aufgabe:
| Thema | Referenz | Wann laden |
|---|---|---|
| Komponenten | references/components.md | Astro-Komponenten schreiben, Props, Slots, Ausdrücke |
| Client-Direktiven | references/client-directives.md | Hydratationsstrategien, client:load, client:visible, client:idle |
| Content Collections | references/content-collections.md | Content Layer API, Loader, Schemata, getCollection, getEntry, Live Loader |
| Routing | references/routing.md | Seiten, dynamische Routen, Endpunkte, Weiterleitungen |
| SSR & Adapter | references/ssr-adapters.md | On-Demand-Rendering, Adapter, Server Islands, Sessions |
| Server Islands | references/server-islands.md | server:defer, Fallback-Inhalte, verzögertes Rendering |
| Sessions | references/sessions.md | Astro.session, serverseitiger Zustand, Warenkörbe |
| View Transitions | references/view-transitions.md | ClientRouter, Animationen, Transitions-Direktiven |
| Aktionen | references/actions.md | Formularbehandlung, defineAction, Validierung |
| Middleware | references/middleware.md | onRequest, Sequence, context.locals |
| Styling | references/styling.md | Scoped CSS, globale Styles, class:list |
| Bilder | references/images.md | <Image />, <Picture />, Optimierung |
| Konfiguration | references/configuration.md | astro.config.mjs, TypeScript, Env-Variablen |
| Umgebungsvariablen | references/environment-variables.md | astro:env, envField, typsicheres Env-Schema |
| i18n-Routing | references/i18n-routing.md | Mehrsprachige Websites, Gebietsschemata, astro:i18n-Helfer |
Richtlinien nach Kontext
Kontextspezifische Regeln sind im Verzeichnis rules/ verfügbar:
rules/astro-components.rule.md→ Komponentenstruktur-Musterrules/client-hydration.rule.md→ Hydratationsstrategie-Entscheidungenrules/content-collections.rule.md→ Best Practices für Collection-Schemata (Content Layer API)rules/astro-routing.rule.md→ Routing-Muster und dynamische Routenrules/astro-ssr.rule.md→ SSR-Konfiguration und Adapterrules/astro-images.rule.md→ Bildoptimierungs-Musterrules/astro-typescript.rule.md→ TypeScript-Konfigurationrules/server-islands.rule.md→ Server-Island-Muster undserver:deferrules/sessions.rule.md→ Serverseitiges Sitzungsmanagement
Kritische Regeln
MUSS ERFOLGEN
- Verwenden Sie die Islands-Architektur – hydrieren Sie nur interaktive Komponenten
- Wählen Sie geeignete Client-Direktiven basierend auf Interaktionsanforderungen
- Verwenden Sie
server:deferfür personalisierte/dynamische Inhalte auf statischen Seiten - Definieren Sie Content-Collection-Schemata mit Zod für Typsicherheit
- Verwenden Sie die Content Layer API mit Loadern (
glob,file) insrc/content.config.ts - Importieren Sie Zod aus
astro/zodund rendern Sie ausastro:content(Astro 5+) - Verwenden Sie
<Image />und<Picture />für optimierte Bilder - Implementieren Sie ordnungsgemäße Fehlergrenzen für Client-Komponenten
- Verwenden Sie TypeScript im strikten Modus für Typsicherheit
- Konfigurieren Sie den passenden Adapter für das Deployment-Ziel
- Verwenden Sie
Astro.propsfür die Datenübergabe an Komponenten - Verwenden Sie das
astro:env-Schema für typsichere Umgebungsvariablen - Verwenden Sie
Astro.sessionfür serverseitiges Zustandsmanagement
DARF NICHT ERFOLGEN
- Hydrieren Sie keine Komponenten, die keine Interaktivität benötigen (verwenden Sie
client:nur bei Bedarf) - Verwenden Sie
client:onlyohne Angabe des Frameworks - Importieren Sie Bilder mit Zeichenfolgenpfaden (verwenden Sie Import-Anweisungen)
- Überspringen Sie die Schema-Validierung in Content Collections
- Mischen Sie
server- undhybrid-Ausgabemodi falsch - Greifen Sie in vorgerenderten Seiten auf
Astro.requestzu - Verwenden Sie Browser-APIs im Frontmatter von Komponenten (serverseitiger Code)
- Vergessen Sie, Adapter für SSR-Deployments zu installieren
- Übergeben Sie Funktionen als Props an
server:defer-Komponenten (nicht serialisierbar) - Greifen Sie in vorgerenderten Seiten auf
Astro.sessionzu (erfordert On-Demand-Rendering) - Verwenden Sie
src/content/config.tsfür neue Projekte (verwenden Siesrc/content.config.tsmit Loadern)
Kurzreferenz
Komponentenstruktur
---
// Komponenten-Skript (läuft auf dem Server)
interface Props {
title: string;
count?: number;
}
const { title, count = 0 } = Astro.props;
const data = await fetch('https://api.example.com/data');
---
<!-- Komponenten-Template -->
<div>
<h1>{title}</h1>
<p>Count: {count}</p>
</div>
<style>
/* Standardmäßig Scoped */
h1 { color: navy; }
</style>
Direktiven-Priorität
- Keine Direktive → Statisches HTML, null JavaScript
server:defer→ Verzögertes Server-Rendering (Server Island)client:load→ Sofort nach Seitenaufbau hydrierenclient:idle→ Hydrieren, wenn der Browser im Leerlauf istclient:visible→ Hydrieren, wenn die Komponente in den Viewport eintrittclient:media→ Hydrieren, wenn die Media Query zutrifftclient:only→ SSR überspringen, nur auf dem Client rendern
Content-Collection-Schema (Astro 5+)
// src/content.config.ts
import { defineCollection } from 'astro:content';
import { glob } from 'astro/loaders';
import { z } from 'astro/zod';
const blog = defineCollection({
loader: glob({ base: './src/content/blog', pattern: '**/*.{md,mdx}' }),
schema: z.object({
title: z.string(),
date: z.coerce.date(),
draft: z.boolean().default(false),
tags: z.array(z.string()).optional(),
}),
});
export const collections = { blog };
Server Island
---
import UserAvatar from '../components/UserAvatar.astro';
---
<UserAvatar server:defer>
<img slot="fallback" src="/generic-avatar.svg" alt="Wird geladen..." />
</UserAvatar>
Ausgabeformat
Bei der Implementierung von Astro-Funktionen geben Sie Folgendes an:
- Komponentendatei (
.astromit Frontmatter und Template) - Konfigurationsaktualisierungen (
astro.config.mjs, falls nötig) - Content-Collection-Schema (falls Collections verwendet werden)
- TypeScript-Typen (für Props und Daten)
- Kurze Erklärung der gewählten Hydratationsstrategie
Technologien
Astro 5+/6+, Islands-Architektur, Content Layer API (glob/file-Loader, Live Loader), Zod-Schemata, View Transitions API, Server Islands (server:defer), Sessions, Aktionen, Middleware, astro:env (typsichere Umgebungsvariablen), i18n-Routing, Adapter (Node, Vercel, Netlify, Cloudflare, Deno), React-/Vue-/Svelte-/Solid-Integrationen, Bildoptimierung, MDX, Markdoc, TypeScript, Scoped CSS, Tailwind CSS