first commit
This commit is contained in:
106
frontend/vite.config.ts
Normal file
106
frontend/vite.config.ts
Normal file
@@ -0,0 +1,106 @@
|
||||
import { defineConfig } from 'vitest/config'
|
||||
import type { Plugin } from 'vite'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
import { readdirSync } from 'node:fs'
|
||||
import tailwindcss from '@tailwindcss/vite'
|
||||
import { visualizer } from 'rollup-plugin-visualizer'
|
||||
|
||||
// MPA: raccoglie automaticamente ogni *.html nella root di frontend/ come entry di build.
|
||||
// { 'index': '/app/index.html', 'scheda': '/app/scheda.html', ... }
|
||||
const frontendRoot = fileURLToPath(new URL('.', import.meta.url))
|
||||
const htmlEntries = Object.fromEntries(
|
||||
readdirSync(frontendRoot)
|
||||
.filter((file) => file.endsWith('.html'))
|
||||
.map((file) => [file.slice(0, -'.html'.length), fileURLToPath(new URL(file, import.meta.url))])
|
||||
)
|
||||
|
||||
function mpaRewritePlugin(): Plugin {
|
||||
return {
|
||||
name: 'mpa-rewrite',
|
||||
configureServer(server: any) {
|
||||
server.middlewares.use((req: any, _res: any, next: any) => {
|
||||
if (
|
||||
req.url &&
|
||||
!req.url.includes('.') &&
|
||||
!req.url.startsWith('/@') &&
|
||||
!req.url.startsWith('/api') &&
|
||||
!req.url.startsWith('/sanctum') &&
|
||||
!req.url.startsWith('/storage') &&
|
||||
!req.url.startsWith('/documentation') &&
|
||||
!req.url.startsWith('/api-docs') &&
|
||||
req.url !== '/'
|
||||
) {
|
||||
// Mappa il primo segmento del path sul relativo .html.
|
||||
// Es: /scheda/uno-slug -> /scheda.html (lo slug resta leggibile da location.pathname)
|
||||
const firstSegment = req.url.split('?')[0].split('/')[1]
|
||||
req.url = `/${firstSegment}.html`
|
||||
}
|
||||
next()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [
|
||||
tailwindcss(),
|
||||
visualizer(),
|
||||
mpaRewritePlugin()
|
||||
],
|
||||
resolve: {
|
||||
// Alias lato Vite/bundler: tsconfig `paths` vale solo per il type-check, Vite
|
||||
// ha bisogno del proprio alias per risolvere `@/...` a runtime e in build.
|
||||
alias: {
|
||||
'@': fileURLToPath(new URL('./src', import.meta.url)),
|
||||
},
|
||||
},
|
||||
build: {
|
||||
rollupOptions: {
|
||||
// MPA: auto-detect delle pagine. Ogni *.html nella root di frontend/ è un entry
|
||||
// (nome = file senza estensione). Aggiungere una pagina = creare il suo .html,
|
||||
// nessuna modifica qui. Vedi htmlEntries sotto.
|
||||
input: htmlEntries,
|
||||
}
|
||||
},
|
||||
server: {
|
||||
host: '0.0.0.0',
|
||||
allowedHosts: ['dyncoll-dev.local'],
|
||||
port: 5173,
|
||||
proxy: {
|
||||
'/api-docs': {
|
||||
target: 'http://backend:8000',
|
||||
changeOrigin: true,
|
||||
secure: false,
|
||||
rewrite: (path: string) => path.replace(/^\/api-docs/, '/docs')
|
||||
},
|
||||
'/api': {
|
||||
target: 'http://backend:8000',
|
||||
changeOrigin: true,
|
||||
secure: false // accetta certificati self-signed
|
||||
},
|
||||
'/sanctum': {
|
||||
target: 'http://backend:8000',
|
||||
changeOrigin: true,
|
||||
secure: false,
|
||||
},
|
||||
'/storage': {
|
||||
target: 'http://backend:8000',
|
||||
changeOrigin: true,
|
||||
secure: false // accetta certificati self-signed
|
||||
},
|
||||
// Documentazione utente (MkDocs) — servizio docker `docs`
|
||||
'/documentation': {
|
||||
target: 'http://docs:8000',
|
||||
changeOrigin: true,
|
||||
secure: false,
|
||||
rewrite: (path: string) => path.replace(/^\/documentation/, '') || '/'
|
||||
}
|
||||
}
|
||||
},
|
||||
test: {
|
||||
coverage: {
|
||||
provider: 'v8',
|
||||
reporter: ['text', 'html', 'lcov'],
|
||||
},
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user