Files
WhiteNightsAdminPanel/vite.config.ts
Микаэл Оганесян 349c7009c6 закрыл задачу 13
2025-10-29 02:32:14 +03:00

85 lines
2.2 KiB
TypeScript

import { defineConfig, type UserConfigExport } from "vite";
import react from "@vitejs/plugin-react";
import tailwindcss from "@tailwindcss/vite";
import path from "path";
type ManualChunksFn = (id: string, api: { getModuleIds: () => Iterable<string> }) => string | undefined;
const manualChunks: ManualChunksFn = (id) => {
if (id.includes('node_modules')) {
if (
id.includes('three.') ||
id.includes('@react-three') ||
id.includes('ol/') ||
id.includes('mapbox-gl') ||
id.includes('@babel/runtime')
) {
return 'vendor-3d-maps';
}
if (id.includes('codemirror') || id.includes('react-codemirror2')) {
return 'vendor-codemirror';
}
if (id.includes('hls.js')) {
return 'vendor-hls';
}
if (id.includes('pixi.js')) {
return 'vendor-pixijs';
}
if (id.includes('@mui/material') || id.includes('@mui/icons-material') || id.includes('@mui/x-data-grid')) {
return 'vendor-mui-core';
}
if (id.includes('/react/') || id.includes('/react-dom/')) {
return 'vendor-react-core';
}
if (id.includes('react-router') || id.includes('history')) {
return 'vendor-router';
}
return 'vendor-common-remainder';
}
if (id.includes('src/pages/')) {
const pathParts = id.split('src/pages/');
if (pathParts.length > 1) {
return 'page-' + pathParts[1].split('/')[0].toLowerCase();
}
}
};
export default defineConfig({
plugins: [
react(),
tailwindcss(),
],
resolve: {
alias: {
"@shared": path.resolve(__dirname, "src/shared"),
"@entities": path.resolve(__dirname, "src/entities"),
"@features": path.resolve(__dirname, "src/features"),
"@widgets": path.resolve(__dirname, "src/widgets"),
"@pages": path.resolve(__dirname, "src/pages"),
"@app": path.resolve(__dirname, "src/app"),
},
},
build: {
chunkSizeWarningLimit: 2000,
rollupOptions: {
output: {
manualChunks,
entryFileNames: `assets/[name]-[hash].js`,
chunkFileNames: `assets/[name]-[hash].js`,
assetFileNames: `assets/[name]-[hash].[ext]`,
}
}
}
}) as UserConfigExport;