
# CLI

`./vendor/bin/tailwindphp` — это PHP-порт **[@tailwindcss/cli](https://github.com/tailwindlabs/tailwindcss/tree/next/packages/%40tailwindcss-cli)** без необходимости в Node.js. Он принимает те же параметры сборки, кроме карт исходного кода (`--map`), но сканирует содержимое иначе: см. [Что сканирует CLI](#what-the-cli-scans). После `composer require tailwindphp/tailwindphp` бинарный файл встраивается в `vendor/bin/`.

Если во время выполнения вам нужны только CSS из PHP, используйте вместо этого [API](https://tailwindphp.inline0.dev/ru/docs/api) — CLI предназначен для процессов сборки, записывающих таблицу стилей на диск.

## Быстрый старт

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

## Параметры

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

Для длинных параметров указывайте значение через `=`: `--input=./src/app.css`, `--output=./dist/styles.css`, `--cwd=/path/to/project`. Значение через пробел после длинного параметра (`--input ./src/app.css`) сейчас игнорируется без ошибки, а сборка использует значения по умолчанию ([#13](https://github.com/inline0/tailwindphp/issues/13)). Короткие параметры принимают значение следующим аргументом (`-i ./src/app.css`).

| Параметр | Описание | По умолчанию |
|---|---|---|
| `-i, --input` | Входной файл CSS; `--input=-` считывает его из stdin | `@import "tailwindcss"` |
| `-o, --output` | Выходной файл | `-` (stdout) |
| `-w, --watch` | Отслеживать изменения и при необходимости пересобирать | — |
| `-m, --minify` | Оптимизировать и минифицировать результат | — |
| `--optimize` | В документации указано «оптимизировать без минификации»; сейчас минифицирует, как `--minify` ([#9](https://github.com/inline0/tailwindphp/issues/9)) | — |
| `--cwd` | Текущий рабочий каталог | `.` |
| `-h, --help` | Показать справочную информацию | — |
| `-V, --version` | Вывести версию | — |
| `-v, --verbose` | Вывести трассировку стека при ошибке сборки | — |

Если `--output` равен `-` (по умолчанию), скомпилированный CSS выводится в stdout, поэтому его можно перенаправить в другое место. Сообщения о ходе работы (баннер версии и `Done in …ms`) выводятся в stderr.

В отличие от `@tailwindcss/cli`, параметра `--map` нет: TailwindPHP не создает карты исходного кода.

## Входной файл CSS

Создайте `app.css` с импортом Tailwind, темой и директивами:

```css
@import "tailwindcss";

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

## Что сканирует CLI

Сканирование содержимого в CLI пока не учитывает `@source` так же, как это делает `@tailwindcss/cli` ([#8](https://github.com/inline0/tailwindphp/issues/8)). В текущем выпуске:

- **Если во входном CSS нет директивы `@source`**, CLI рекурсивно сканирует рабочую директорию (`--cwd`), включая `vendor/` и `node_modules/`; `.gitignore` не учитывается.
- **Если есть одна или несколько директив `@source`**, CLI рекурсивно сканирует **директорию входного файла**. Путь или шаблон в директиве не применяется: `@source "../templates"` рядом с `src/app.css` сканирует `src/`, а не `templates/`.
- Директивы **`@source not "…"`** пропускаются и ничего не исключают.
- **`@source inline("…")`** и **`@source not inline("…")`** работают как описано, поскольку их обрабатывает сам компилятор.

Читаются только файлы со следующими расширениями: `php`, `html`, `htm`, `twig`, `blade.php`, `vue`, `jsx`, `tsx`, `svelte`, `astro` и `mdx`. Имена классов берутся из атрибутов `class` и `className`, как в [`tw::extractCandidates()`](https://tailwindphp.inline0.dev/ru/docs/api#twextractcandidates), поэтому класс, указанный только в строке PHP или JavaScript, не будет найден. Добавьте такие классы принудительно с помощью `@source inline("…")`.

Пока это не исправлено, надежный вариант — разместить входной файл CSS в начале каталога, который нужно сканировать:

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

См. [@source](https://tailwindphp.inline0.dev/ru/docs/usage/source), где описан синтаксис директив, включая формы `not` и `inline()`.

## Примеры

```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 создает выходной каталог, если он не существует, и завершает работу с ошибкой, если входной файл отсутствует или пути входного и выходного файлов совпадают. В режиме наблюдения проверяется входной файл и просканированные файлы каждые 500 мс; сборка повторяется при изменении любого из них или появлении нового файла.

## Глобальная установка

Установите глобально, чтобы использовать `tailwindphp` из любого места:

```bash
composer global require tailwindphp/tailwindphp

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

См. [Начало работы](https://tailwindphp.inline0.dev/ru/docs/getting-started) для настройки проекта и [API](https://tailwindphp.inline0.dev/ru/docs/api) для генерации CSS во время выполнения из PHP.
