
# CLI

`./vendor/bin/tailwindphp`는 필수 Node.js 없이 사용할 수 있는 PHP 포트입니다. `--map`([@tailwindcss/cli](https://github.com/tailwindlabs/tailwindcss/tree/next/packages/%40tailwindcss-cli))를 제외하면 동일한 빌드 옵션을 사용하지만 콘텐츠 검색 방식은 다릅니다. [What the CLI scans](#what-the-cli-scans)를 참고하세요. `composer require tailwindphp/tailwindphp` 후 바이너리가 `vendor/bin/`에 연결됩니다.

PHP에서 런타임에 CSS만 필요하다면 [API](https://tailwindphp.inline0.dev/ko/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

Tailwind 가져오기, 테마, 지시문을 사용해 `app.css`을 만드세요:

```css
@import "tailwindcss";

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

## CLI이 스캔하는 항목

CLI의 콘텐츠 스캔은 아직 `@tailwindcss/cli`만큼 `@source`을 따르지 않습니다([#8](https://github.com/inline0/tailwindphp/issues/8)). 현재 릴리스에서는 다음과 같습니다:

- 입력 CSS에 **`@source` 파일 지시문이 없으면**, CLI은 작업 디렉터리(`--cwd`)를 재귀적으로 스캔합니다. 여기에는 `vendor/`와 `node_modules/`가 포함되며, `.gitignore`은 참조하지 않습니다.
- **`@source` 파일 지시문이 하나 이상 있으면**, CLI은 **입력 파일의 디렉터리**를 재귀적으로 스캔합니다. 지시문에 지정한 경로나 글롭은 적용되지 않습니다. `src/app.css` 옆에 있는 `@source "../templates"`는 `templates/`가 아닌 `src/`을 스캔합니다.
- **`@source not "…"`** 지시문은 건너뛰며, 아무것도 제외하지 않습니다.
- **`@source inline("…")`** 와 **`@source not inline("…")`** 는 컴파일러가 직접 처리하므로 문서에 설명된 대로 작동합니다.

다음 확장자를 가진 파일만 읽습니다: `php`, `html`, `htm`, `twig`, `blade.php`, `vue`, `jsx`, `tsx`, `svelte`, `astro`, `mdx`. 클래스 이름은 [`tw::extractCandidates()`](https://tailwindphp.inline0.dev/ko/docs/api#twextractcandidates)와 동일하게 `class` 및 `className` 속성에서 가져옵니다. 따라서 PHP 또는 JavaScript 문자열에만 나타나는 클래스는 찾을 수 없습니다. 이러한 클래스는 `@source inline("…")`로 강제 포함하세요.

이 문제가 해결될 때까지는 스캔하려는 디렉터리의 최상위에 입력 CSS 파일을 두는 것이 가장 안정적인 설정입니다:

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

지시문 구문과 `not` 및 `inline()` 형식은 [@source](https://tailwindphp.inline0.dev/ko/docs/usage/source)을 참조하세요.

## 예시

```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은 출력 디렉터리가 없으면 생성하며, 입력 파일이 없거나 입력 경로와 출력 경로가 같으면 오류와 함께 종료합니다. 감시 모드에서는 입력 파일과 스캔된 파일을 500ms마다 확인하고, 파일이 변경되거나 새 파일이 나타나면 다시 빌드합니다.

## 전역 설치

어디서나 `tailwindphp`을 사용할 수 있도록 전역으로 설치하세요:

```bash
composer global require tailwindphp/tailwindphp

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

프로젝트 설정은 [시작하기](https://tailwindphp.inline0.dev/ko/docs/getting-started)를, PHP에서 런타임 CSS 생성을 하려면 [API](https://tailwindphp.inline0.dev/ko/docs/api)를 참조하세요.
