Magento 2 Experten — Hyvä Theme, Tailwind CSS & SEO aus einer Hand ›

Der Build-Prozess: npm, Tailwind CSS v4 CSS-first-Ansatz, Watcher, korrekte Deploy-Sequenz

Der Build-Prozess: npm, Tailwind CSS v4 CSS-first-Ansatz, Watcher, korrekte Deploy-Sequenz

~9 Min. Lesezeit Zuletzt aktualisiert am 9. August 2026

Damit aus Tailwind-Klassen im Template tatsächlich sichtbares CSS wird, muss Tailwind einmal (oder wiederholt während der Entwicklung) laufen und eine styles.css erzeugen. Dieses Kapitel zeigt den kompletten Build-Prozess - von der lokalen Entwicklung mit einem Watcher bis zur produktiven Deploy-Sequenz, die in diesem Projekt für jede Änderung gilt.

npm über den Wrapper

Genau wie bei Composer läuft auch npm im mironsoft-Projekt nie direkt, sondern immer über bin/npm - das stellt sicher, dass die Node-Version aus dem Docker-Container verwendet wird, nicht eine eventuell abweichende lokale Installation.

bin/npm --prefix app/design/frontend/Mironsoft/default/web/tailwind install

Tailwind CSS v4: CSS-first statt tailwind.config.js

Ein wichtiger Unterschied zu älteren Tailwind-Versionen: Ab Tailwind CSS v4 wird die Konfiguration nicht mehr primär in einer tailwind.config.js vorgenommen, sondern direkt im CSS, über die @theme-Direktive. Das Projekt nutzt durchgängig diesen CSS-first-Ansatz.

app/design/frontend/Mironsoft/default/web/tailwind/src/styles.css
@import 'tailwindcss';

@theme {
  --color-brand-dark: #1a2332;
  --color-brand-slate: #475569;
  --color-brand-accent: #0ea5e9;
  --font-sans: 'Inter', sans-serif;
}

Diese Werte stehen danach als ganz normale Utility-Klassen zur Verfügung, zum Beispiel text-brand-dark oder bg-brand-accent. Kapitel 11 und 12 gehen im Detail auf eigene Design-Tokens ein - hier reicht es zu wissen, dass die Konfiguration im CSS selbst liegt, nicht in einer separaten JavaScript-Datei.

Der Watcher für die Entwicklung

Während der lokalen Entwicklung soll sich CSS bei jeder Template- oder CSS-Änderung automatisch neu bauen, ohne dass man manuell einen Befehl ausführt. Dafür gibt es den Tailwind-Watcher, der im mironsoft-Projekt bereits automatisch mit bin/start mitläuft:

bin/npm --prefix app/design/frontend/Mironsoft/default/web/tailwind run watch

Tipp: Wenn CSS-Änderungen im Browser einfach nicht ankommen wollen, ist der Watcher oft der erste Verdächtige: prüfe mit bin/cli ps aux | grep tailwind, ob der Watcher-Prozess überhaupt noch läuft, und starte notfalls mit bin/restart neu.

Der produktive Build

Für ein Deployment (oder um lokal die tatsächliche Produktions-CSS zu testen) wird statt des Watchers ein einmaliger, minifizierter Build ausgeführt:

bin/npm --prefix app/design/frontend/Mironsoft/default/web/tailwind run build

Die korrekte Deploy-Sequenz

Genau hier passiert der häufigste Anfängerfehler: Nur den Tailwind-Build laufen zu lassen reicht nicht, wenn Magento bereits alte, statische Dateien zwischengespeichert hat. Für dieses Projekt gilt immer diese Reihenfolge, in genau dieser Reihenfolge:

  1. CSS neu bauen - bin/npm --prefix app/design/frontend/[Vendor]/[theme]/web/tailwind run build
  2. Static Files löschen (WICHTIG: immer zuerst, vor dem Deploy!) - cd src && rm -rf var/view_preprocessed/* pub/static/frontend/*
  3. Static Content deployen - bin/magento setup:static-content:deploy de_DE -t [Vendor]/[theme] -f
  4. Cache leeren - bin/magento cache:flush
# 1. CSS neu bauen
bin/npm --prefix app/design/frontend/Mironsoft/default/web/tailwind run build

# 2. Static Files löschen (WICHTIG: immer zuerst!)
cd src && rm -rf var/view_preprocessed/* pub/static/frontend/*

# 3. Static Content deployen
bin/magento setup:static-content:deploy de_DE -t Mironsoft/default -f

# 4. Cache leeren
bin/magento cache:flush

Achtung: Die Reihenfolge ist kein Stilvorschlag, sondern zwingend: Wird Schritt 2 (Löschen) übersprungen oder nach Schritt 3 ausgeführt, deployed Magento unter Umständen aus dem view_preprocessed-Cache heraus und die alten CSS-Klassen bleiben aktiv - obwohl der Build augenscheinlich frisch war. Das ist die häufigste Ursache für "meine CSS-Änderung wird einfach nicht angezeigt".

Entwicklungs-Workflow im Alltag

Im Tagesgeschäft (lokale Entwicklung mit Watcher aktiv) reicht meist ein einfaches bin/cache-clean, um Template- oder Layout-XML-Änderungen sichtbar zu machen - die volle Deploy-Sequenz mit produktivem Build ist typischerweise nur vor einem Live-Deployment nötig. Kapitel 27 geht noch einmal detailliert auf diese Sequenz ein, inklusive typischer Fehlerbilder.