호환성 및 업그레이드
이 페이지에서는 업그레이드하거나 정확한 출력을 기대할 때 알아야 할 내용을 정리합니다. 런타임 요구 사항, 포트가 따르는 TailwindCSS 릴리스, TailwindPHP이 TailwindCSS와 의도적으로 다른 부분, 각 릴리스의 참고 사항을 다룹니다. 전체 변경 이력은 CHANGELOG.md에 있습니다.
요구 사항
- PHP 8.2 이상. 테스트 모음은 PHP 8.2, 8.3, 8.4에서 실행됩니다.
ctype및mbstring확장. 컴파일러는ctype_*와mb_chr()를 호출합니다. 두 확장은 대부분의 PHP 빌드와 공식 Docker 이미지에 포함되어 있지만, 아직composer.json에서 선언하지 않았습니다(#11). 따라서 이 확장 없이 빌드하면 패키지는 설치되지만 런타임에서 실패합니다.- 선택 사항:
pcntl이 있으면 CLI의--watch모드가SIGINT/SIGTERM에서 정상적으로 종료됩니다. 없어도 감시 모드는 작동합니다.
Node.js, FFI, 네이티브 바이너리는 사용하지 않습니다.
추적하는 TailwindCSS 릴리스
릴리스 1.7.0는 TailwindCSS v4.3.3를 추적합니다. 업스트림 저장소는 reference/tailwindcss의 git 서브모듈로 고정하고, 해당 고정 체크아웃에서 테스트 스위트를 추출하며, 푸시할 때마다 4,427 테스트를 실행합니다(성능 및 테스트 참조). 포팅된 플러그인은 @tailwindcss/typography과 @tailwindcss/forms을 따르고, 클래스 유틸리티는 clsx, tailwind-merge, CVA를 따릅니다. 각 항목은 같은 방식으로 고정됩니다.
TailwindCSS와의 알려진 차이점
직렬화 세부 사항
생성된 CSS는 참조 테스트 모음과 일치합니다. 직렬화 세부 사항 몇 가지는 TailwindCSS CLI가 출력하는 내용과 다르지만, 캐스케이드에는 영향을 주지 않습니다:
- 벤더 접두사: 참조 구현이 작성된
-webkit-*줄과 생성된 줄을 모두 출력하는 경우, TailwindPHP는 한 줄만 출력합니다. - 다운레벨된 의사 요소(
::file-selector-button,::-webkit-datetime-edit-*)는 의사 요소마다 규칙을 나누지 않고 작성된 선택자 목록에 그대로 둡니다. - 작성된 작은따옴표 문자열은 큰따옴표로 정규화하지 않고 작은따옴표를 유지합니다(
'Segoe UI'). - 함께 나타나는 longhand 속성은 축약 속성으로 결합하지 않습니다(Tailwind 자체 출력에는 결합이 필요하지 않습니다).
.p-0는padding: 0px를 유지합니다. 참조 구현은 CLI를padding: 0로 출력하는데, 추출된 테스트 자료가0px형식으로 고정되어 있기 때문입니다. 축소기는 이를0로 줄입니다.
포함되지 않는 항목
TailwindPHP는 CSS 컴파일러입니다. Tailwind 생태계의 편집기 도구(IntelliSense, 자동 완성, 클래스 정렬)와 소스 맵은 제공하지 않으므로 CLI에는 --map 옵션이 없습니다.
콘텐츠 스캔
tw::generate()와 TailwindCompiler::generate()은 class 및 className 속성에서만 클래스 이름을 읽습니다. PHP 또는 JavaScript 문자열에 들어 있는 클래스 이름에는 tw::extractCandidatesFromStrings() 또는 @source inline("…")를 사용하세요. @source의 경로 형식은 API에서 무시되며 CLI에서도 일부만 적용됩니다(아래 참고).
현재 릴리스의 알려진 문제
| 영역 | 현재 동작 | 문제 |
|---|---|---|
CLI @source |
경로와 글로브가 적용되지 않습니다. 대신 입력 파일의 디렉터리를 스캔하며 @source not는 아무것도 제외하지 않습니다. CLI가 스캔하는 항목 참고 |
#8 |
CLI --optimize |
--minify처럼 축소합니다 |
#9 |
| CLI 긴 옵션 | 공백으로 구분된 --input file.css는 무시됩니다. --input=file.css 또는 -i file.css을 사용하세요 |
#13 |
| 플러그인 변형 | addVariant()/matchVariant() 변형과 타이포그래피 요소 수정자(prose-headings: …)는 선택자 없이 컴파일됩니다 |
#10 |
@apply 믹스인 |
@apply --my-mixin;가 전달되지 않고 제거됩니다 |
#12 |
| 참조 가져오기 | 참조 가져오기가 유틸리티 가져오기보다 먼저 나오면 출력이 비어 있습니다. @import "tailwindcss" reference는 효과가 없습니다 |
#14 |
업그레이드 참고 사항
1.7.0
- 출력 바이트가 변경됩니다. 1.6.x와 비교하면 출력 바이트가 달라지지만 TailwindCSS v4.3.3 참조와 기능적으로 동일합니다. 눈에 띄는 변경 사항은 다음과 같습니다:
- 간격 배수:
p-1는padding: var(--spacing)를 출력하며calc()는 출력하지 않습니다. 배수가0이면 일반 0 길이 값을 출력합니다. - 분수는 백분율로 변환됩니다:
w-1/2는width: 50%을 출력합니다. - 색상:
oklch()/oklab()의 명도는 백분율(oklch(62.3% .214 259.815))로 직렬화되고,white및black은#fff및#000로 단축됩니다. - CSS2 의사 요소는 콜론 하나로 직렬화됩니다(
:before,:after,:first-letter,:first-line). - 중첩된
@media/@supports/@container규칙은 끝으로 이동하지 않고 소스 순서대로 제자리에 평탄화됩니다. 선언은 lightningcss의 순서에 따라 재정렬되고, 가려지는 중복 선언은 제거됩니다.
- 간격 배수:
- 출력을 기준으로 한 캐시는 한 번 무효화됩니다.
tw::generate()의 파일 캐시는 키에 TailwindPHP 버전을 포함하지 않으므로 업그레이드 후tw::clearCache()(또는cache로 전달한 디렉터리)를 실행하세요. 컴파일러 상태 캐시는 자동으로 무효화됩니다. - 새 기능: 작성된 CSS의
@variant,@apply의 CSS 믹스인,@media reference및@import "…" reference, 함수형@utility을 위한 전체--value()/--modifier()엔진, 더 엄격한@utility이름 검증,tw::compile()의polyfills옵션.
1.6.1
- 새 기능:
container유틸리티(width: 100%와 각 중단점마다 하나씩 추가되는max-width). - 조합된
--tw-*변수(translate, scale, rotate, skew, 필터 등)가 이제@property에 등록되어, 스타일시트에 해당@property규칙이 추가되고translate-x-7같은 변환이 브라우저에서 적용됩니다.
1.6.0
- 새 기능: 영구 컴파일러 상태 캐시(
tw::compile()및TailwindCompiler에서stateCacheFile,StateCache\compileCssCached()), 그리고 분리된parseCssState()/finalizeCssState()/compileParsed()함수. 기존 호출은 이전과 정확히 동일하게 동작합니다.
1.5.0
TailwindCompiler의 하위 클래스에서generate()또는css()를 재정의하면 선택적bool $minify = false매개변수를 추가해야 합니다. PHP는 부모의 선택적 매개변수를 생략하는 재정의를 거부합니다.- 축소 출력은 직렬화기에서 생성되므로 축소된 바이트는 1.4.x와 약간 다릅니다(축소 출력 기준 캐시는 한 번 무효화됩니다).
- 새 기능: 하나의 오래 실행되는 컴파일러에서 페이지별 CSS을 위한
generateExact()및cssExact().