
# CLI

`./vendor/bin/tailwindphp` es una implementación PHP de **[@tailwindcss/cli](https://github.com/tailwindlabs/tailwindcss/tree/next/packages/%40tailwindcss-cli)** que no requiere Node.js. Acepta las mismas opciones de compilación, excepto los mapas de fuentes (`--map`), pero analiza el contenido de otra manera: consulte [Qué analiza CLI](#what-the-cli-scans). Tras `composer require tailwindphp/tailwindphp`, el binario se enlaza en `vendor/bin/`.

Si solo necesita CSS en tiempo de ejecución desde PHP, use [API](https://tailwindphp.inline0.dev/es/docs/api); CLI está pensado para flujos de trabajo de compilación que escriben una hoja de estilos en el disco.

## Inicio rápido

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

## Opciones

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

Indique el valor de las opciones largas con `=`: `--input=./src/app.css`, `--output=./dist/styles.css`, `--cwd=/path/to/project`. Actualmente, se ignora sin mostrar un error el valor separado por un espacio tras una opción larga (`--input ./src/app.css`), y la compilación usa los valores predeterminados ([#13](https://github.com/inline0/tailwindphp/issues/13)). Las opciones cortas aceptan el valor como argumento siguiente (`-i ./src/app.css`).

| Opción | Descripción | Predeterminado |
|---|---|---|
| `-i, --input` | Archivo de entrada CSS; `--input=-` lo lee desde la entrada estándar | `@import "tailwindcss"` |
| `-o, --output` | Archivo de salida | `-` (salida estándar) |
| `-w, --watch` | Busca cambios y vuelve a compilar cuando sea necesario | — |
| `-m, --minify` | Optimiza y minimiza el resultado | — |
| `--optimize` | Se documenta como «optimizar sin minimizar»; actualmente minimiza igual que `--minify` ([#9](https://github.com/inline0/tailwindphp/issues/9)) | — |
| `--cwd` | Directorio de trabajo actual | `.` |
| `-h, --help` | Muestra información de uso | — |
| `-V, --version` | Muestra la versión | — |
| `-v, --verbose` | Muestra el seguimiento de pila si falla una compilación | — |

Cuando `--output` es `-` (el valor predeterminado), el CSS compilado se escribe en la salida estándar, por lo que puede canalizarlo a otro destino. Los mensajes de progreso (el aviso de la versión y `Done in …ms`) se envían a la salida de error estándar.

A diferencia de `@tailwindcss/cli`, no hay opción `--map`: TailwindPHP no genera mapas de fuentes.

## Entrada CSS

Cree un `app.css` con su importación de Tailwind, tema y directivas:

```css
@import "tailwindcss";

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

## Qué analiza CLI

El análisis de contenido en CLI aún no sigue `@source` como lo hace `@tailwindcss/cli` ([#8](https://github.com/inline0/tailwindphp/issues/8)). En la versión actual:

- **Si la entrada CSS no contiene una directiva de archivo `@source`**, CLI analiza recursivamente el directorio de trabajo (`--cwd`). Esto incluye `vendor/` y `node_modules/`; no consulta `.gitignore`.
- **Si hay una o más directivas de archivo `@source`**, CLI analiza recursivamente el **directorio del archivo de entrada**. No se aplica la ruta ni el patrón glob de la directiva: `@source "../templates"` junto a `src/app.css` analiza `src/`, no `templates/`.
- Se omiten las directivas **`@source not "…"`**; no excluyen nada.
- **`@source inline("…")`** y **`@source not inline("…")`** funcionan según lo documentado, porque el compilador las gestiona directamente.

Solo se leen los archivos con estas extensiones: `php`, `html`, `htm`, `twig`, `blade.php`, `vue`, `jsx`, `tsx`, `svelte`, `astro` y `mdx`. Los nombres de clase se obtienen de los atributos `class` y `className`, igual que en [`tw::extractCandidates()`](https://tailwindphp.inline0.dev/es/docs/api#twextractcandidates), por lo que no se detecta una clase que solo aparezca en una cadena PHP o JavaScript. Incluya esas clases de forma explícita con `@source inline("…")`.

Hasta que se corrija, la configuración fiable consiste en colocar un archivo de entrada CSS en la raíz del directorio que quiera analizar:

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

Consulte [@source](https://tailwindphp.inline0.dev/es/docs/usage/source) para ver la sintaxis de las directivas, incluidas las formas `not` y `inline()`.

## Ejemplos

```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 el directorio de salida si no existe y termina con un error si falta el archivo de entrada o si las rutas de entrada y salida son idénticas. El modo de observación comprueba el archivo de entrada y los archivos analizados cada 500 ms, y vuelve a compilar cuando alguno cambia o aparece un archivo nuevo.

## Instalación global

Instálelo globalmente para usar `tailwindphp` desde cualquier lugar:

```bash
composer global require tailwindphp/tailwindphp

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

Consulte [Introducción](https://tailwindphp.inline0.dev/es/docs/getting-started) para configurar el proyecto y [API](https://tailwindphp.inline0.dev/es/docs/api) para generar CSS en tiempo de ejecución a partir de PHP.
