70 lines
2.1 KiB
TypeScript
70 lines
2.1 KiB
TypeScript
import { fileURLToPath, URL } from 'node:url'
|
|
|
|
import { defineConfig } from 'vite'
|
|
import vue from '@vitejs/plugin-vue'
|
|
import vueJsx from '@vitejs/plugin-vue-jsx'
|
|
import { SetTemplateGroup } from './Configs.js'
|
|
|
|
// https://vitejs.dev/config/
|
|
export default defineConfig({
|
|
plugins: [
|
|
vue({
|
|
template: {
|
|
compilerOptions: {
|
|
comments: false
|
|
}
|
|
}
|
|
}),
|
|
vueJsx()
|
|
],
|
|
resolve: {
|
|
alias: {
|
|
'@': fileURLToPath(new URL('./src', import.meta.url))
|
|
}
|
|
},
|
|
esbuild: {
|
|
drop: process.env.NODE_ENV === 'production' ? ['console', 'debugger'] : []
|
|
},
|
|
build: {
|
|
rollupOptions: {
|
|
output: {
|
|
manualChunks(id) {
|
|
if (id.includes('/src/')) {
|
|
const group = SetTemplateGroup(id)
|
|
if (group) return `grp_${group}` // group files
|
|
}
|
|
|
|
// jquery files
|
|
if (id.includes('node_modules/jquery')) return 'ven_jquery'
|
|
if (id.includes('node_modules/summernote')) return 'ven_summer'
|
|
if (id.includes('node_modules/pdfmake')) return 'ven_pdfmake'
|
|
if (id.includes('node_modules/html-to-pdfmake')) return 'ven_pdfmake'
|
|
if (id.includes('node_modules/vue3-pdfmake')) return 'ven_pdfmake'
|
|
|
|
// other node_modules files
|
|
if (id.includes('node_modules')) return 'vendor'
|
|
},
|
|
assetFileNames: (assetInfo) => {
|
|
const name = assetInfo.names?.[0] || assetInfo.name || ''
|
|
|
|
if (name.endsWith('.css')) {
|
|
return 'static/css/[name]-[hash][extname]'
|
|
}
|
|
if (/\.(png|jpe?g|svg|gif|webp|ico)$/i.test(name)) {
|
|
return 'static/images/[name]-[hash][extname]'
|
|
}
|
|
if (/\.(ttf|woff2?|eot|otf)$/i.test(name)) {
|
|
return 'static/fonts/[name]-[hash][extname]'
|
|
}
|
|
return 'static/[name]-[hash][extname]'
|
|
},
|
|
chunkFileNames: (chunkInfo) => {
|
|
if (chunkInfo.name?.startsWith('grp_')) return 'static/js/[name]-[hash].js'
|
|
return 'static/js/[name]-[hash].js'
|
|
},
|
|
entryFileNames: 'static/js/[name]-[hash].js'
|
|
}
|
|
}
|
|
}
|
|
})
|