fix: préserver les URLs /assets/img/ dans le CSS au build
All checks were successful
Deploy / Deploy to Production (push) Successful in 21s

Vite réécrit les url() du CSS en supprimant le chemin (assetFileNames: '[name].[ext]').
Extension du plugin keepFontsInPlace pour corriger les URLs /assets/img/ dans le bundle CSS final.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
isUnknown 2026-03-25 13:41:16 +01:00
parent e41a730b4d
commit 411b281317

View file

@ -6,6 +6,9 @@ import path from 'path'
* Plugin: les fonts restent dans assets/fonts/, sans duplication dans dist/.
* Vite les copie dans dist/ pendant le build ce plugin les supprime du bundle
* et réécrit leurs URLs dans le CSS pour pointer vers /assets/fonts/.
*
* Également : les URLs /assets/img/ dans le CSS sont préservées telles quelles
* (Vite les réécrit en supprimant le chemin à cause de assetFileNames: '[name].[ext]').
*/
function keepFontsInPlace() {
const fontRe = /\.(woff2?|ttf|otf)$/i
@ -19,10 +22,19 @@ function keepFontsInPlace() {
}
for (const chunk of Object.values(bundle)) {
if (chunk.type === 'asset' && chunk.fileName.endsWith('.css')) {
// Réécrit les URLs des fonts
chunk.source = chunk.source.replace(
/url\((['"]?)([^'")\s]*\.(woff2?|ttf|otf))\1\)/gi,
(_, _q, p) => `url("/assets/fonts/${decodeURIComponent(p.split('/').pop())}")`
)
// Réécrit les URLs des images /assets/img/ (Vite supprime le chemin)
chunk.source = chunk.source.replace(
/url\((['"]?)([^'")\s]*assets\/img\/[^'")\s]*\.(png|jpe?g|gif|webp|avif|svg))\1\)/gi,
(_, _q, p) => {
const filename = decodeURIComponent(p.split('/').pop())
return `url("/assets/img/${filename}")`
}
)
}
}
}