
# CLI

`./vendor/bin/tailwindphp` è un port PHP di **[@tailwindcss/cli](https://github.com/tailwindlabs/tailwindcss/tree/next/packages/%40tailwindcss-cli)** che non richiede Node.js. Accetta le stesse opzioni di compilazione, tranne le mappe sorgente (`--map`), ma analizza i contenuti in modo diverso: consultate [Cosa analizza CLI](#what-the-cli-scans). Dopo `composer require tailwindphp/tailwindphp`, il binario viene collegato a `vendor/bin/`.

Se vi serve solo CSS in fase di esecuzione da PHP, usate invece [API](https://tailwindphp.inline0.dev/it/docs/api): CLI è pensato per flussi di lavoro di compilazione che scrivono un foglio di stile su disco.

## Avvio rapido

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

## Opzioni

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

Assegnate un valore alle opzioni lunghe con `=`: `--input=./src/app.css`, `--output=./dist/styles.css`, `--cwd=/path/to/project`. Al momento, un valore separato da uno spazio dopo un'opzione lunga (`--input ./src/app.css`) viene ignorato senza errori e la compilazione usa i valori predefiniti ([#13](https://github.com/inline0/tailwindphp/issues/13)). Le opzioni brevi accettano il valore come argomento successivo (`-i ./src/app.css`).

| Opzione | Descrizione | Valore predefinito |
|---|---|---|
| `-i, --input` | File CSS di input; `--input=-` lo legge da stdin | `@import "tailwindcss"` |
| `-o, --output` | File di output | `-` (stdout) |
| `-w, --watch` | Rileva le modifiche e ricompila quando necessario | — |
| `-m, --minify` | Ottimizza e minimizza l'output | — |
| `--optimize` | La documentazione indica «ottimizza senza minimizzare»; al momento minimizza come `--minify` ([#9](https://github.com/inline0/tailwindphp/issues/9)) | — |
| `--cwd` | Directory di lavoro corrente | `.` |
| `-h, --help` | Mostra le informazioni sull'utilizzo | — |
| `-V, --version` | Stampa la versione | — |
| `-v, --verbose` | Stampa la traccia dello stack se una compilazione non riesce | — |

Quando `--output` è `-` (valore predefinito), il file CSS compilato viene scritto su stdout, così potete reindirizzarlo altrove. I messaggi di avanzamento (il banner della versione e `Done in …ms`) vengono inviati a stderr.

A differenza di `@tailwindcss/cli`, non esiste l'opzione `--map`: TailwindPHP non genera mappe sorgente.

## File CSS di input

Create un `app.css` con l'importazione, il tema e le direttive di Tailwind:

```css
@import "tailwindcss";

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

## Cosa analizza CLI

L'analisi dei contenuti in CLI non segue ancora `@source` come fa `@tailwindcss/cli` ([#8](https://github.com/inline0/tailwindphp/issues/8)). Nella versione attuale:

- **Senza una direttiva `@source` nel file** nel file di input CSS, CLI analizza ricorsivamente la directory di lavoro (`--cwd`). Sono incluse anche `vendor/` e `node_modules/`; `.gitignore` non viene consultato.
- **Con una o più direttive `@source` nel file**, CLI analizza ricorsivamente la **directory del file di input**. Il percorso o il glob nella direttiva non viene applicato: `@source "../templates"` accanto a `src/app.css` analizza `src/`, non `templates/`.
- Le direttive **`@source not "…"`** vengono ignorate e non escludono nulla.
- **`@source inline("…")`** e **`@source not inline("…")`** funzionano come documentato, perché vengono gestite direttamente dal compilatore.

Vengono letti solo i file con queste estensioni: `php`, `html`, `htm`, `twig`, `blade.php`, `vue`, `jsx`, `tsx`, `svelte`, `astro` e `mdx`. I nomi delle classi vengono ricavati dagli attributi `class` e `className`, come in [`tw::extractCandidates()`](https://tailwindphp.inline0.dev/it/docs/api#twextractcandidates); pertanto, una classe presente solo in una stringa PHP o JavaScript non viene trovata. Aggiungete queste classi manualmente con `@source inline("…")`.

Finché il problema non sarà risolto, la configurazione più affidabile prevede un file di input CSS nella directory da analizzare, al suo livello principale:

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

Consultate [@source](https://tailwindphp.inline0.dev/it/docs/usage/source) per la sintassi delle direttive, comprese le forme `not` e `inline()`.

## Esempi

```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 crea la directory di output se non esiste ed esce con un errore se manca il file di input o se i percorsi di input e output coincidono. La modalità di osservazione controlla il file di input e quelli analizzati ogni 500 ms e ricompila quando uno di essi cambia o viene aggiunto un nuovo file.

## Installazione globale

Installate globalmente per usare `tailwindphp` da qualsiasi posizione:

```bash
composer global require tailwindphp/tailwindphp

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

Consultate [Per iniziare](https://tailwindphp.inline0.dev/it/docs/getting-started) per configurare il progetto e [API](https://tailwindphp.inline0.dev/it/docs/api) per generare CSS in fase di esecuzione da PHP.
