All commands are run from the root of the project, from a terminal:
| Command | Action |
|---|---|
npm install |
Installs dependencies |
npm run dev |
Starts local dev server at localhost:4321 |
npm run build |
Build your production site to ./dist/ |
npm run preview |
Preview your build locally, before deploying |
npm run astro ... |
Run CLI commands like astro add, astro check |
npm run astro -- --help |
Get help using the Astro CLI |
Falls du nicht weiterkommst, kannst du dir die Musterlösung im feat/solve Branch anschauen.
Ziel: Projekt aufsetzen und erste Komponentenstruktur verstehen
- Installiere die dependencies mit
npm install. - Starte den lokalen Server mit
npm run devund öffne den "Work-Shop" unterlocalhost:4321/workshop.
Ziel: Einstieg ins Projekt, Code-Aufbau verstehen und Bildoptimierung mit [https://docs.astro.build/de/guides/images/](Astro Assets) nutzen
- Eine vorgefertigte Landing-Page mit
<Hero />,<PromoBanner />,<ProductList />existiert bereits. - Im
<Hero />ist aktuell ein unoptimiertes<img>-Tag hinterlegt.
- Öffne
src/components/Hero.astround verschaffe dir einen Überblick über den Code. - Ersetze das
<img src="/assets/hero.jpg" ...>durch das<Image />-Component von Astro. - Verschiebe das Bild in den
src/assets/-Ordner, falls es dort noch nicht ist. - Stelle sicher, dass das Bild optimiert wird.
Ziel: Erstelle eine https://docs.astro.build/de/guides/content-collections/ für die Produktdaten und nutze getCollection in <ProductList />.
- Definiere in
src/content.config.tsdie Collectionproductsmit den Daten aussrc/data/products.json. Du kannst auch mit Zod ein passendes Schema erstellen. - Öffne
src/components/ProductList.astround ersetze das leere Array mit der Collection (getCollection). - Stelle sicher, dass Vorschaubild, Titel und Preis angezeigt werden.
Ziel: Nutze die Collection, um [https://docs.astro.build/de/core-concepts/routing/](Static Paths zu erstellen) und Produktseiten mit getEntryBySlug zu befüllen.
- Implementiere unter
src/pages/products/[id].astrodiegetStaticPaths()Methode mitgetCollection, um die Seiten generieren zu lassen. - Rufe eines der Produkte auf, um die dynamische Seite zu testen.
Ziel: Erstelle eine interaktive Tab-Komponente, um verschiedene Produktinformationen zu präsentieren. Nutze eine Client-Island für die Tab-Logik.
- Erstelle eine Komponente in
src/components/ProductTabs.*(Astro, React, Vue etc.). - Die Tabs nehmen Produktinformationen als Props entgegen.
- Drei Tabs: Produktinformationen, Versandinformationen, Bewertungen.
- Ob es schön aussieht, ist egal – Fokus liegt auf der Funktionalität.
- Teste aus, was die verschiedenen Client Directives (z.B.
client:visible,client:load) bewirken.
Ziel: Lerne, wie du eine https://docs.astro.build/de/guides/server-islands/ in Astro verwendest, um dynamische Daten direkt auf dem Server zu rendern.
- Erstelle eine neue Komponente, z.B.
AvailabilityMessage.astroinsrc/components/. - Hole dir die Verfügbarkeitsdaten über einen Fetch-Request von dieser URL:
http://www.randomnumberapi.com/api/v1.0/random. - Binde die Komponente auf der Produktseite (
[id].astro) mit derserver:deferdirective ein. - Die Ausgabe soll z.B. so aussehen:
Nur noch <span class="font-semibold">{data}</span> verfügbar! - Prüfe deinen Netzwerk-Tab im Browser, um zu sehen, wie die Daten geladen werden. Der Inhalt sollte vom dev-Server als HTML ausgeliefert werden.