82 lines
2.2 KiB
JavaScript
82 lines
2.2 KiB
JavaScript
import { fileURLToPath, URL } from 'node:url'
|
|
import { defineConfig, loadEnv } from 'vite'
|
|
import vue from '@vitejs/plugin-vue'
|
|
import vueDevTools from 'vite-plugin-vue-devtools'
|
|
|
|
export default defineConfig(({ mode }) => {
|
|
const env = loadEnv(mode, process.cwd(), '')
|
|
const isProd = mode === 'production'
|
|
|
|
return {
|
|
plugins: [
|
|
vue(),
|
|
!isProd && vueDevTools(),
|
|
].filter(Boolean),
|
|
|
|
resolve: {
|
|
alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) },
|
|
},
|
|
|
|
server: {
|
|
host: '0.0.0.0',
|
|
port: 5173,
|
|
open: true,
|
|
hmr: { overlay: true },
|
|
},
|
|
|
|
build: {
|
|
sourcemap: env.VITE_ENABLE_SOURCE_MAP === 'true',
|
|
minify: isProd ? 'terser' : false,
|
|
terserOptions: isProd ? {
|
|
compress: {
|
|
drop_console: true,
|
|
drop_debugger: true,
|
|
},
|
|
} : {},
|
|
rollupOptions: {
|
|
output: {
|
|
manualChunks: (id) => {
|
|
if (id.includes('node_modules')) {
|
|
if (id.includes('vue') || id.includes('pinia') || id.includes('vue-router')) {
|
|
return 'vue-vendor'
|
|
}
|
|
if (id.includes('axios')) {
|
|
return 'http-vendor'
|
|
}
|
|
if (id.includes('moment')) {
|
|
return 'date-vendor'
|
|
}
|
|
if (id.includes('choices.js') || id.includes('flatpickr')) {
|
|
return 'ui-vendor'
|
|
}
|
|
if (id.includes('sweetalert2')) {
|
|
return 'dialog-vendor'
|
|
}
|
|
return 'vendor'
|
|
}
|
|
},
|
|
chunkFileNames: 'assets/js/[name]-[hash].js',
|
|
entryFileNames: 'assets/js/[name]-[hash].js',
|
|
assetFileNames: 'assets/[ext]/[name]-[hash].[ext]',
|
|
},
|
|
onwarn(warning, warn) {
|
|
if (warning.code === 'MODULE_BROKEN') {
|
|
return
|
|
}
|
|
if (warning.code === 'CIRCULAR_DEPENDENCY') {
|
|
return
|
|
}
|
|
if (warning.code === 'SOURCEMAP_ERROR') {
|
|
return
|
|
}
|
|
if (warning.code === 'THIS_IS_UNDEFINED') {
|
|
return
|
|
}
|
|
warn(warning)
|
|
},
|
|
},
|
|
chunkSizeWarningLimit: 1000,
|
|
},
|
|
}
|
|
})
|