
# CLI

`./vendor/bin/tailwindphp` est un port PHP de **[@tailwindcss/cli](https://github.com/tailwindlabs/tailwindcss/tree/next/packages/%40tailwindcss-cli)** qui ne nécessite aucun Node.js. Il accepte les mêmes options de compilation, à l'exception des cartes sources (`--map`), mais analyse le contenu différemment : consultez [Ce que CLI analyse](#what-the-cli-scans). Après `composer require tailwindphp/tailwindphp`, le binaire est lié à `vendor/bin/`.

Si vous avez uniquement besoin de CSS à l'exécution depuis PHP, utilisez plutôt [API](https://tailwindphp.inline0.dev/fr/docs/api) ; le CLI est destiné aux workflows de compilation qui écrivent une feuille de style sur le disque.

## Démarrage rapide

```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
```

## Options

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

Indiquez la valeur des options longues avec `=` : `--input=./src/app.css`, `--output=./dist/styles.css`, `--cwd=/path/to/project`. Une valeur séparée par un espace après une option longue (`--input ./src/app.css`) est actuellement ignorée sans erreur, et la compilation utilise les valeurs par défaut ([#13](https://github.com/inline0/tailwindphp/issues/13)). Les options courtes prennent leur valeur comme argument suivant (`-i ./src/app.css`).

| Option | Description | Valeur par défaut |
|---|---|---|
| `-i, --input` | Fichier d'entrée CSS ; `--input=-` le lit depuis stdin | `@import "tailwindcss"` |
| `-o, --output` | Fichier de sortie | `-` (stdout) |
| `-w, --watch` | Surveille les modifications et relance la compilation si nécessaire | — |
| `-m, --minify` | Optimise et minifie le résultat | — |
| `--optimize` | Présentée comme « optimiser sans minifier » ; minifie actuellement comme `--minify` ([#9](https://github.com/inline0/tailwindphp/issues/9)) | — |
| `--cwd` | Répertoire de travail actuel | `.` |
| `-h, --help` | Affiche les informations d'utilisation | — |
| `-V, --version` | Affiche la version | — |
| `-v, --verbose` | Affiche la trace de pile en cas d'échec de compilation | — |

Lorsque `--output` vaut `-` (valeur par défaut), le CSS compilé est écrit sur stdout, ce qui permet de le rediriger. Les messages de progression (la bannière de version et `Done in …ms`) sont envoyés sur stderr.

Contrairement à `@tailwindcss/cli`, il n'existe pas d'option `--map` : TailwindPHP ne génère pas de cartes sources.

## Entrée CSS

Créez un `app.css` avec votre import Tailwind, votre thème et vos directives :

```css
@import "tailwindcss";

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

## Ce que CLI analyse

L'analyse du contenu dans CLI ne suit pas encore `@source` comme le fait `@tailwindcss/cli` ([#8](https://github.com/inline0/tailwindphp/issues/8)). Dans la version actuelle :

- **Sans directive de fichier `@source`** dans le CSS d'entrée, CLI analyse récursivement le répertoire de travail (`--cwd`). Cela inclut `vendor/` et `node_modules/` ; `.gitignore` n'est pas consulté.
- **Avec une ou plusieurs directives de fichier `@source`**, CLI analyse récursivement le **répertoire du fichier d'entrée**. Le chemin ou le motif global de la directive n'est pas appliqué : un fichier `@source "../templates"` placé à côté de `src/app.css` analyse `src/`, et non `templates/`.
- Les directives **`@source not "…"`** sont ignorées ; elles n'excluent rien.
- **`@source inline("…")`** et **`@source not inline("…")`** fonctionnent comme indiqué, car le compilateur les gère lui-même.

Seuls les fichiers ayant les extensions suivantes sont lus : `php`, `html`, `htm`, `twig`, `blade.php`, `vue`, `jsx`, `tsx`, `svelte`, `astro` et `mdx`. Les noms de classes sont extraits des attributs `class` et `className`, comme dans [`tw::extractCandidates()`](https://tailwindphp.inline0.dev/fr/docs/api#twextractcandidates) ; une classe présente uniquement dans une chaîne PHP ou JavaScript ne sera donc pas détectée. Ajoutez ces classes avec `@source inline("…")`.

En attendant la correction, la configuration fiable consiste à placer un fichier d'entrée CSS à la racine du répertoire à analyser :

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

Consultez [@source](https://tailwindphp.inline0.dev/fr/docs/usage/source) pour la syntaxe des directives, y compris les formes `not` et `inline()`.

## Exemples

```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 crée le répertoire de sortie s'il n'existe pas et renvoie une erreur si le fichier d'entrée est introuvable ou si les chemins d'entrée et de sortie sont identiques. Le mode surveillance vérifie le fichier d'entrée et les fichiers analysés toutes les 500 ms, puis relance la compilation si l'un d'eux change ou si un nouveau fichier apparaît.

## Installation globale

Installez globalement pour utiliser `tailwindphp` depuis n'importe où :

```bash
composer global require tailwindphp/tailwindphp

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

Consultez [Bien démarrer](https://tailwindphp.inline0.dev/fr/docs/getting-started) pour configurer un projet et [API](https://tailwindphp.inline0.dev/fr/docs/api) pour générer CSS à l'exécution depuis PHP.
