
Reprise 0.8.0 débarque, et c'est exactement le genre de release qui mérite qu'on s'y attarde deux minutes! Quelques semaines après l'introduction du projet sur le blog Symfony, cette nouvelle version expérimentale coche trois cases importantes pour quiconque a déjà migré (ou songé à migrer) d'Encore.
Le retour (discret) d'Encore dans Reprise
On se rappelle tous des galères quand on copiait des fichiers avec Encore: les fichiers gardaient un chemin stable sur le disque, et le hash se baladait tranquillement dans la query string. Reprise, dans sa logique première, hashait systématiquement le nom du fichier. Résultat: pour les projets qui s'appuyaient sur asset('/build/images/logo.svg') ou pire, sur du code PHP qui lisait directement depuis un chemin connu, il fallait écrire un plugin custom. Pas idéal, vraiment pas idéal.
La 0.8.0 corrige le tir avec une option hash (à true par défaut, comme promis). On la passe à false et le fichier garde son chemin logique, pendant que le hash de contenu migre dans le manifest.json sous forme de query string. Bref, asset continue de renvoyer une URL versionnée. Et c'est par entrée, donc on peut mixer fichiers hashés et stables dans la même config. Malin!
Petit bonus dans le même PR: un to vide permet de poser un fichier à la racine de l'outputPath. Pratique pour les favicon.ico et autres site.webmanifest qui doivent vivre à un endroit bien précis (les règles CDN vous remercieront).
Vite vs Rsbuild: le manifeste fait la paix
Vous avez déjà pesté contre un asset qui résolvait en Vite mais plantait en Rsbuild? Bienvenue au club. Le souci venait du manifest.json: Vite écrivait la clé en strippant la query string, Rsbuild la conservait. Du coup asset('fonts/query.woff2') dans Twig ne matchait jamais côté Rsbuild. Même projet, même CSS, comportement opposé: la loose totale.
Maintenant, query string ET fragment sont strippés avant l'écriture de la clé de manifeste. CSS et Twig peuvent enfin se comprendre sans médiation. C'est le genre de fix qu'on remarque à peine quand tout marche, mais qu'on maudit copieusement quand il manque (et on a maudit, croyez-moi).
Corepack sort par la porte, pnpm entre par la fenêtre
Node.js a cessé de livrer Corepack en v25, après un vote du TSC. Et franchement, on ne va pas pleurer: passer par un shim Node.js qui doit d'abord résoudre et télécharger le gestionnaire de paquets, c'était d'une lenteur absurde. Reprise vire la dépendance. Les workflows CI utilisent désormais pnpm/setup, qui récupère le binaire standalone et installe Node.js en une seule étape. Côté local, on installe pnpm comme un grand, sans passer par corepack enable. Symfony UX a fait le même move dans symfony/ux#3774 — la maison-mère montre l'exemple, on suit!
On s'y met, ou on attend la 1.0?
Reprise reste expérimental et en 0.x. C'est précisément maintenant que vos retours pèsent dans la balance de ce qui viendra après Encore. Testez sur un vrai projet, ouvrez une issue, ou envoyez un PR sur GitHub. C'est comme ça que l'open source avance: pas dans les tours d'ivoire, mais dans les PR quotidiennes de celles et ceux qui utilisent l'outil au quotidien. La hype est là, à nous de transformer l'essai avant que la 1.0 ne fige les choix pour de bon. Vous en pensez quoi, on mise tout sur Reprise dès maintenant ou on temporise encore une release?