Zgodność i aktualizacja
Na tej stronie zebrano informacje potrzebne przed aktualizacją lub poleganiem na dokładnym wyniku: wymagania środowiska uruchomieniowego, wydanie TailwindCSS, za którym podąża port, znane różnice TailwindPHP względem TailwindCSS oraz uwagi dotyczące poszczególnych wydań. Pełna historia znajduje się w CHANGELOG.md.
Wymagania
- PHP 8.2 lub nowszy. Zestaw testów działa na PHP 8.2, 8.3 i 8.4.
- Rozszerzenia
ctypeimbstring. Kompilator wywołujectype_*imb_chr(). Są dołączane do większości buildów PHP i oficjalnych obrazów Docker, alecomposer.jsonjeszcze ich nie deklaruje (#11), więc build bez nich zainstaluje pakiet, który nie zadziała w środowisku uruchomieniowym. - Opcjonalnie:
pcntlpozwala trybowi--watchCLI poprawnie kończyć działanie przySIGINT/SIGTERM. Bez niego tryb watch nadal działa.
Nie używa Node.js, FFI ani binariów natywnych.
Które wydanie TailwindCSS jest śledzone
Wydanie 1.7.0 śledzi TailwindCSS v4.3.3. Repozytorium nadrzędne jest przypięte jako podmoduł git w reference/tailwindcss, zestawy testów są wyodrębniane z przypiętej kopii, a testy 4,427 są uruchamiane przy każdym pushu (zobacz Wydajność i testowanie). Przeniesione wtyczki są zgodne z @tailwindcss/typography i @tailwindcss/forms, a narzędzia klasowe z clsx, tailwind-merge i CVA; wszystkie są przypięte w ten sam sposób.
Znane różnice względem TailwindCSS
Szczegóły serializacji
Wygenerowany CSS przechodzi referencyjne zestawy testów. Niektóre szczegóły serializacji różnią się od wyniku TailwindCSS CLI, ale żadna z tych różnic nie zmienia kaskady:
- Prefiksy dostawców: gdy wersja referencyjna generuje zarówno zapisaną przez autora linię
-webkit-*, jak i wygenerowaną, TailwindPHP emituje jedną linię. - Pseudoelementy przekształcone do starszej składni (
::file-selector-button,::-webkit-datetime-edit-*) pozostają na swoich listach selektorów zapisanych przez autora, zamiast być rozdzielane na osobną regułę dla każdego pseudoelementu. - Zapisane przez autora ciągi w apostrofach pozostają w apostrofach (
'Segoe UI'), zamiast być normalizowane do cudzysłowów. - Współwystępujące właściwości pełne nie są łączone we właściwość skróconą (własny wynik Tailwind nigdy tego nie wymaga).
.p-0zachowujepadding: 0pxtam, gdzie wersja referencyjna CLI emitujepadding: 0, ponieważ wyodrębniony zbiór testów wymaga postaci0px. Minifikator skraca ją do0.
Poza zakresem
TailwindPHP to kompilator CSS. Nie obejmuje narzędzi edytorskich z ekosystemu Tailwind (IntelliSense, autouzupełniania, sortowania klas) ani map źródeł, dlatego CLI nie ma opcji --map.
Skanowanie zawartości
tw::generate() i TailwindCompiler::generate() odczytują nazwy klas wyłącznie z atrybutów class i className. W przypadku nazw klas zapisanych w ciągach PHP lub JavaScript użyj tw::extractCandidatesFromStrings() albo @source inline("…"). Ścieżki w formacie @source są ignorowane przez API i tylko częściowo uwzględniane przez CLI (szczegóły poniżej).
Znane problemy w bieżącym wydaniu
| Obszar | Obecne działanie | Problem |
|---|---|---|
CLI @source |
Ścieżki i wzorce glob nie są stosowane; zamiast tego skanowany jest katalog pliku wejściowego, a @source not niczego nie wyklucza. Zobacz Co skanuje CLI |
#8 |
CLI --optimize |
Minifikuje, podobnie jak --minify |
#9 |
| Długie opcje CLI | --input file.css (oddzielone spacją) jest ignorowane; użyj --input=file.css lub -i file.css |
#13 |
| Warianty wtyczek | Warianty addVariant()/matchVariant() i modyfikatory elementów typografii (prose-headings: …) są kompilowane bez selektora |
#10 |
Mixiny @apply |
@apply --my-mixin; jest usuwane zamiast przekazywane dalej |
#12 |
| Importy referencyjne | Wynik jest pusty, gdy import referencyjny poprzedza import narzędzi; @import "tailwindcss" reference nie ma wpływu |
#14 |
Uwagi dotyczące aktualizacji
1.7.0
- Wynik zmienia się bajtowo względem 1.6.x, zachowując równoważność funkcjonalną z implementacją referencyjną TailwindCSS v4.3.3. Widoczne zmiany obejmują:
- Mnożniki odstępów:
p-1emitujepadding: var(--spacing)zamiastcalc(), a mnożnik0emituje zwykłą długość równą zero. - Ułamki są zamieniane na wartości procentowe:
w-1/2emitujewidth: 50%. - Kolory: jasność
oklch()/oklab()jest serializowana jako wartość procentowa (oklch(62.3% .214 259.815)), awhiteiblacksą skracane do#fffi#000. - Pseudoelementy CSS2 są serializowane z pojedynczym dwukropkiem (
:before,:after,:first-letter,:first-line). - Zagnieżdżone reguły
@media/@supports/@containersą spłaszczane na miejscu, w kolejności źródłowej, zamiast być przenoszone na koniec; deklaracje są porządkowane tak, jak robi to lightningcss, a przesłonięte duplikaty deklaracji są usuwane.
- Mnożniki odstępów:
- Pamięci podręczne oparte na wyniku zostaną jednorazowo unieważnione. Klucz pamięci podręcznej plików
tw::generate()nie uwzględnia wersji TailwindPHP, więc po aktualizacji uruchomtw::clearCache()(lub katalog przekazany jakocache). Pamięć podręczna stanu kompilatora cache stanu kompilatora sama się unieważnia. - Nowości:
@variantw CSS autora, CSS mixiny w@apply,@media referencei@import "…" reference, pełny silnik--value()/--modifier()dla funkcjonalnego@utility, ściślejsza walidacja nazw@utilityoraz opcjapolyfillsdlatw::compile().
1.6.1
- Nowość: narzędzie
container(width: 100%plus jedenmax-widthna każdy punkt przerwania). - Złożone zmienne
--tw-*(przesunięcie, skalowanie, obracanie, pochylenie, filtry i inne) są teraz zarejestrowane w@property, dzięki czemu arkusze stylów zyskują reguły@property, a transformacje takie jaktranslate-x-7działają w przeglądarce.
1.6.0
- Nowość: trwała pamięć podręczna stanu kompilatora (
stateCacheFilewtw::compile()iTailwindCompiler,StateCache\compileCssCached()) oraz rozdzielone funkcjeparseCssState()/finalizeCssState()/compileParsed(). Dotychczasowe wywołania działają dokładnie jak wcześniej.
1.5.0
- Podklasy
TailwindCompiler, które nadpisujągenerate()lubcss(), muszą dodać opcjonalny parametrbool $minify = false; PHP odrzuca nadpisania pomijające opcjonalny parametr klasy bazowej. - Zminifikowany wynik pochodzi z serializatora, dlatego bajty wyniku po minifikacji nieco różnią się od 1.4.x (pamięci podręczne oparte na zminifikowanym wyniku zostaną jednorazowo unieważnione).
- Nowość:
generateExact()icssExact()do obsługi CSS dla poszczególnych stron z poziomu jednego długotrwałego kompilatora.