
# CLI

`./vendor/bin/tailwindphp` ist eine PHP-Portierung von **[@tailwindcss/cli](https://github.com/tailwindlabs/tailwindcss/tree/next/packages/%40tailwindcss-cli)** ohne erforderliches Node.js. Der Befehl übernimmt dieselben Build-Optionen, abgesehen von Source Maps (`--map`), durchsucht Inhalte jedoch anders: siehe [Was der CLI durchsucht](#what-the-cli-scans). Nach `composer require tailwindphp/tailwindphp` wird die Binärdatei in `vendor/bin/` verlinkt.

Wenn du CSS nur zur Laufzeit von PHP brauchst, verwende stattdessen [API](https://tailwindphp.inline0.dev/de/docs/api). Der CLI ist für Build-Abläufe gedacht, die ein Stylesheet auf die Festplatte schreiben.

## Schnellstart

```bash
# Build CSS from an input file
./vendor/bin/tailwindphp -i ./src/app.css -o ./dist/styles.css

# Watch for changes and rebuild
./vendor/bin/tailwindphp -i ./src/app.css -o ./dist/styles.css --watch

# Build minified for production
./vendor/bin/tailwindphp -i ./src/app.css -o ./dist/styles.css --minify
```

## Optionen

```bash
tailwindphp [-i input.css] [-o output.css] [--watch] [options…]
```

Gib langen Optionen ihren Wert mit `=` an: `--input=./src/app.css`, `--output=./dist/styles.css`, `--cwd=/path/to/project`. Ein durch Leerzeichen getrennter Wert nach einer langen Option (`--input ./src/app.css`) wird derzeit ohne Fehlermeldung ignoriert, und der Build verwendet die Standardwerte ([#13](https://github.com/inline0/tailwindphp/issues/13)). Kurze Optionen übernehmen den Wert als nächstes Argument (`-i ./src/app.css`).

| Option | Beschreibung | Standardwert |
|---|---|---|
| `-i, --input` | Eingabe-CSS-Datei; `--input=-` liest sie von stdin | `@import "tailwindcss"` |
| `-o, --output` | Ausgabedatei | `-` (stdout) |
| `-w, --watch` | Auf Änderungen warten und bei Bedarf neu erstellen | — |
| `-m, --minify` | Ausgabe optimieren und minimieren | — |
| `--optimize` | Dokumentiert als „optimieren, ohne zu minimieren“; minimiert derzeit wie `--minify` ([#9](https://github.com/inline0/tailwindphp/issues/9)) | — |
| `--cwd` | Aktuelles Arbeitsverzeichnis | `.` |
| `-h, --help` | Nutzungsinformationen anzeigen | — |
| `-V, --version` | Version ausgeben | — |
| `-v, --verbose` | Stacktrace ausgeben, wenn ein Build fehlschlägt | — |

Wenn `--output` auf `-` gesetzt ist (Standard), wird das kompilierte CSS auf stdout ausgegeben, sodass du es weiterleiten kannst. Fortschrittsmeldungen (Versionsbanner und `Done in …ms`) gehen an stderr.

Anders als `@tailwindcss/cli` gibt es keine `--map`-Option: TailwindPHP erstellt keine Source Maps.

## Eingabe-CSS

Erstelle eine `app.css` mit deinem Tailwind-Import, Theme und Direktiven:

```css
@import "tailwindcss";

@theme {
    --color-brand: #3b82f6;
}
```

## Was der CLI durchsucht

Die Inhaltssuche im CLI folgt noch nicht `@source` wie `@tailwindcss/cli` ([#8](https://github.com/inline0/tailwindphp/issues/8)). In der aktuellen Version gilt:

- **Ohne `@source`-Dateidirektive** in der Eingabe-CSS durchsucht der CLI das Arbeitsverzeichnis (`--cwd`) rekursiv. Das umfasst auch `vendor/` und `node_modules/`; `.gitignore` wird nicht berücksichtigt.
- **Mit einer oder mehreren `@source`-Dateidirektiven** durchsucht der CLI das **Verzeichnis der Eingabedatei** rekursiv. Der Pfad oder Glob in der Direktive wird nicht angewendet: `@source "../templates"` neben `src/app.css` durchsucht `src/`, nicht `templates/`.
- **`@source not "…"`**-Direktiven werden übersprungen und schließen nichts aus.
- **`@source inline("…")`** und **`@source not inline("…")`** funktionieren wie dokumentiert, da der Compiler sie selbst verarbeitet.

Es werden nur Dateien mit diesen Erweiterungen gelesen: `php`, `html`, `htm`, `twig`, `blade.php`, `vue`, `jsx`, `tsx`, `svelte`, `astro` und `mdx`. Klassennamen werden aus den Attributen `class` und `className` entnommen, genau wie bei [`tw::extractCandidates()`](https://tailwindphp.inline0.dev/de/docs/api#twextractcandidates). Eine Klasse, die nur in einer Zeichenfolge mit PHP oder JavaScript vorkommt, wird daher nicht gefunden. Binde solche Klassen mit `@source inline("…")` ein.

Bis das behoben ist, empfiehlt sich als zuverlässige Lösung eine Eingabe-CSS-Datei im obersten Verzeichnis, das du durchsuchen möchtest:

```css
/* templates/app.css: scans templates/ recursively */
@import "tailwindcss";
@source "./";
```

Siehe [@source](https://tailwindphp.inline0.dev/de/docs/usage/source) für die Direktiven-Syntax, einschließlich der Formen `not` und `inline()`.

## Beispiele

```bash
# Build from an input file
tailwindphp -i ./src/app.css -o ./dist/styles.css

# Build minified for production
tailwindphp -i ./src/app.css -o ./dist/styles.css -m

# Watch mode with minification
tailwindphp -i ./src/app.css -o ./dist/styles.css -w -m

# Run against a different working directory
tailwindphp -i app.css -o dist/styles.css --cwd=/path/to/project
```

CLI erstellt das Ausgabeverzeichnis, falls es nicht existiert, und bricht mit einer Fehlermeldung ab, wenn die Eingabedatei fehlt oder Eingabe- und Ausgabepfad identisch sind. Im Überwachungsmodus prüft der Befehl die Eingabedatei und die durchsuchten Dateien alle 500 ms und erstellt neu, wenn sich eine davon ändert oder eine neue Datei erscheint.

## Globale Installation

Installiere es global, um `tailwindphp` von überall aus zu verwenden:

```bash
composer global require tailwindphp/tailwindphp

# Now available globally
tailwindphp -i ./src/app.css -o ./dist/styles.css
```

Siehe [Erste Schritte](https://tailwindphp.inline0.dev/de/docs/getting-started) für die Projekteinrichtung und [API](https://tailwindphp.inline0.dev/de/docs/api) zur Laufzeit-CSS-Generierung aus PHP.
