world-game/vite.config.js
isUnknown 411b281317
All checks were successful
Deploy / Deploy to Production (push) Successful in 21s
fix: préserver les URLs /assets/img/ dans le CSS au build
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>
2026-03-25 13:41:16 +01:00

84 lines
2.6 KiB
JavaScript

import { defineConfig } from 'vite'
import { svelte } from '@sveltejs/vite-plugin-svelte'
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
return {
name: 'keep-fonts-in-place',
generateBundle(_, bundle) {
for (const [key, chunk] of Object.entries(bundle)) {
if (fontRe.test(key)) {
delete bundle[key]
}
}
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}")`
}
)
}
}
}
}
}
export default defineConfig({
plugins: [
svelte({
configFile: './svelte.config.js'
}),
keepFontsInPlace(),
],
resolve: {
alias: {
'@components': path.resolve(__dirname, 'src/components'),
'@views': path.resolve(__dirname, 'src/views'),
'@state': path.resolve(__dirname, 'src/state'),
'@router': path.resolve(__dirname, 'src/router'),
'@utils': path.resolve(__dirname, 'src/utils'),
'@composables': path.resolve(__dirname, 'src/composables'),
'@i18n': path.resolve(__dirname, 'src/i18n')
}
},
server: {
port: 5173,
proxy: {
'^(?!/@vite|/@fs|/node_modules|/src).*': {
target: 'http://localhost:8000',
changeOrigin: true
}
}
},
build: {
outDir: 'assets/dist',
emptyOutDir: true,
manifest: false,
rollupOptions: {
input: 'src/main.js',
output: {
entryFileNames: 'index.js',
chunkFileNames: '[name].js',
assetFileNames: '[name].[ext]'
}
}
}
})