Compatibilité et mise à niveau
Cette page rassemble les informations à connaître avant une mise à niveau ou si vous avez besoin d’une sortie exacte : les prérequis d’exécution, la version de TailwindCSS suivie par le portage, les différences assumées de TailwindPHP par rapport à TailwindCSS et les notes de chaque version. L’historique complet se trouve dans CHANGELOG.md.
Prérequis
- PHP 8.2 ou version ultérieure. La suite de tests s’exécute sur PHP 8.2, 8.3 et 8.4.
- Les extensions
ctypeetmbstring. Le compilateur appellectype_*etmb_chr(). Elles sont toutes deux fournies avec la plupart des versions PHP et les images officielles Docker, maiscomposer.jsonne les déclare pas encore (#11) : une compilation sans elles installe le paquet, puis échoue à l’exécution. - Facultatif :
pcntlpermet au mode--watchde CLI de s’arrêter proprement surSIGINT/SIGTERM. Sans cette extension, le mode de surveillance fonctionne toujours.
Aucun Node.js, aucune FFI et aucun binaire natif ne sont utilisés.
Version TailwindCSS suivie
La version 1.7.0 suit TailwindCSS v4.3.3. Le dépôt amont est épinglé comme sous-module git dans reference/tailwindcss ; ses suites de tests sont extraites de cette copie épinglée, et les tests 4,427 s’exécutent à chaque push (voir Performances et tests). Les plugins portés suivent @tailwindcss/typography et @tailwindcss/forms, et les utilitaires de classes suivent clsx, tailwind-merge et CVA, chacun épinglé de la même manière.
Différences connues avec TailwindCSS
Détails de sérialisation
Le CSS généré correspond aux suites de tests de référence. Quelques détails de sérialisation diffèrent de ce qu’affiche TailwindCSS CLI, sans modifier la cascade :
- Préfixes vendeurs : lorsque la référence émet à la fois la ligne
-webkit-*écrite par l’auteur et une ligne générée, TailwindPHP n’en émet qu’une. - Les pseudo-éléments rétrogradés (
::file-selector-button,::-webkit-datetime-edit-*) restent dans leurs listes de sélecteurs d’origine au lieu d’être séparés en une règle par pseudo-élément. - Les chaînes écrites avec des apostrophes simples restent ainsi (
'Segoe UI'), au lieu d’être normalisées avec des guillemets doubles. - Les propriétés longues présentes ensemble ne sont pas combinées en propriété abrégée (la sortie de Tailwind n’en a jamais besoin).
.p-0conservepadding: 0pxlà où la référence CLI émetpadding: 0, car le corpus de tests extrait impose la forme0px. Le minificateur la raccourcit en0.
Éléments non inclus
TailwindPHP est un compilateur CSS. Il n’inclut pas les outils d’édition de l’écosystème Tailwind (IntelliSense, autocomplétion, tri des classes) ni les source maps ; le CLI ne propose donc pas d’option --map.
Analyse du contenu
tw::generate() et TailwindCompiler::generate() lisent les noms de classe uniquement dans les attributs class et className. Pour les noms de classe présents dans des chaînes PHP ou JavaScript, utilisez tw::extractCandidatesFromStrings() ou @source inline("…"). Les formes de chemin de @source sont ignorées par API et seulement partiellement prises en charge par CLI (voir ci-dessous).
Problèmes connus dans la version actuelle
| Domaine | Comportement actuel | Problème |
|---|---|---|
CLI @source |
Les chemins et les motifs glob ne sont pas appliqués ; le répertoire du fichier d’entrée est analysé à la place, et @source not n’exclut rien. Voir Ce que l’analyseur CLI analyse |
#8 |
CLI --optimize |
Minifie, comme --minify |
#9 |
| Options longues CLI | --input file.css (séparé par un espace) est ignoré ; utilisez --input=file.css ou -i file.css |
#13 |
| Variantes de greffons | Les variantes addVariant()/matchVariant() et les modificateurs d’élément de typographie (prose-headings: …) sont compilés sans leur sélecteur |
#10 |
Mixins @apply |
@apply --my-mixin; est supprimé au lieu d’être transmis |
#12 |
| Imports de référence | La sortie est vide si un import de référence précède l’import des utilitaires ; @import "tailwindcss" reference n’a aucun effet |
#14 |
Notes de mise à niveau
1.7.0
- La sortie change octet par octet par rapport à 1.6.x, tout en restant fonctionnellement équivalente à la référence TailwindCSS v4.3.3. Parmi les changements visibles :
- Multiplicateurs d’espacement :
p-1émetpadding: var(--spacing)au lieu d’uncalc(), et un multiplicateur de0émet une longueur nulle sans unité. - Les fractions sont converties en pourcentages :
w-1/2émetwidth: 50%. - Couleurs : la luminosité de
oklch()/oklab()est sérialisée en pourcentage (oklch(62.3% .214 259.815)),whiteetblacksont raccourcis en#fffet#000. - Les pseudo-éléments CSS2 sont sérialisés avec un seul deux-points (
:before,:after,:first-letter,:first-line). - Les règles
@media/@supports/@containerimbriquées sont aplaties sur place, dans l’ordre source, au lieu d’être déplacées à la fin ; les déclarations sont réordonnées comme le fait lightningcss et les déclarations en doublon masquées sont supprimées.
- Multiplicateurs d’espacement :
- Les caches basés sur la sortie sont invalidés une fois. La clé du cache de fichiers de
tw::generate()n’inclut pas la version de TailwindPHP ; exécutez donctw::clearCache()(ou le répertoire indiqué àcache) après la mise à niveau. Le cache de l’état du compilateur s’invalide automatiquement. - Nouveau :
@variantdans le CSS de l’auteur, les mixins CSS dans@apply,@media referenceet@import "…" reference, le moteur complet--value()/--modifier()pour@utilityfonctionnel, une validation plus stricte des noms@utilityet l’optionpolyfillsdetw::compile().
1.6.1
- Nouveau : l’utilitaire
container(width: 100%plus unmax-widthpar point de rupture). - Les variables
--tw-*composées (translation, échelle, rotation, inclinaison, filtres et autres) sont maintenant enregistrées auprès de@property; les feuilles de style gagnent donc ces règles@propertyet les transformations telles quetranslate-x-7prennent effet dans le navigateur.
1.6.0
- Nouveau : le cache persistant de l’état du compilateur (
stateCacheFilesurtw::compile()etTailwindCompiler,StateCache\compileCssCached()), ainsi que la séparation des fonctionsparseCssState()/finalizeCssState()/compileParsed(). Les appels existants se comportent exactement comme avant.
1.5.0
- Les sous-classes de
TailwindCompilerqui redéfinissentgenerate()oucss()doivent ajouter le paramètre facultatifbool $minify = false; PHP rejette les redéfinitions qui omettent un paramètre facultatif de la classe parente. - La sortie minifiée provient du sérialiseur ; ses octets diffèrent donc légèrement de 1.4.x (les caches basés sur la sortie minifiée sont invalidés une fois).
- Nouveau :
generateExact()etcssExact()pour obtenir un CSS par page à partir d’un compilateur de longue durée.