Files
michaelschiemer/vite.config.js
2025-11-24 21:28:25 +01:00

115 lines
3.5 KiB
JavaScript

import { defineConfig } from 'vite';
import { resolve } from 'path';
import { VitePWA } from 'vite-plugin-pwa';
import * as fs from 'node:fs';
export default defineConfig({
build: {
outDir: 'public', // Direct output to public directory
manifest: '.vite/manifest.json', // Put manifest in .vite subfolder
emptyOutDir: false, // Don't delete existing public files
assetsDir: 'assets',
// Performance optimizations
minify: 'terser',
terserOptions: {
compress: {
drop_console: false, // Keep console.log for debugging
drop_debugger: true
}
},
// Chunk optimization to prevent excessive fragmentation
rollupOptions: {
input: {
main: resolve(import.meta.dirname, 'resources/js/main.js')
},
output: {
// Simplified chunking - disable manual chunking to let Vite handle it naturally
// manualChunks: undefined,
// Optimize chunk sizes
chunkFileNames: 'assets/js/[name]-[hash].js',
entryFileNames: 'assets/js/[name]-[hash].js',
assetFileNames: (assetInfo) => {
const info = assetInfo.name.split('.');
const ext = info[info.length - 1];
if (/\.(png|jpe?g|svg|gif|tiff|bmp|ico)$/i.test(assetInfo.name)) {
return `assets/images/[name]-[hash].${ext}`;
}
if (/\.css$/i.test(assetInfo.name)) {
return `assets/css/[name]-[hash].${ext}`;
}
return `assets/[name]-[hash].${ext}`;
}
}
},
// Compression and optimization
reportCompressedSize: true,
chunkSizeWarningLimit: 1000,
// Source maps for production debugging
sourcemap: 'hidden'
},
plugins: [
// PWA plugin temporarily disabled due to build issues
// VitePWA({ ... })
],
// Optimized development server
server: {
https: (() => {
try {
if (fs.existsSync('./ssl/localhost.pem') && fs.existsSync('./ssl/localhost-key.pem')) {
return {
key: fs.readFileSync('./ssl/localhost-key.pem'),
cert: fs.readFileSync('./ssl/localhost.pem')
};
}
} catch (error) {
console.warn('SSL certificates not found, falling back to HTTP');
}
return false;
})(),
host: true,
port: 3000,
open: false,
hmr: {
overlay: true
}
},
// CSS optimization
css: {
devSourcemap: true,
preprocessorOptions: {
scss: {
additionalData: '@import "resources/css/settings/variables.css";'
}
}
},
// Dependency optimization
optimizeDeps: {
include: [
// Pre-bundle known dependencies
],
exclude: [
// Exclude problematic dependencies
]
},
// Asset handling
assetsInclude: ['**/*.woff2', '**/*.woff', '**/*.ttf'],
// Development environment
define: {
__DEV__: JSON.stringify(process.env.NODE_ENV !== 'production')
}
});