xt-admin/vite.config.ts
2022-11-05 17:45:11 +08:00

101 lines
2.7 KiB
TypeScript

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path';
import viteCompression from 'vite-plugin-compression';
import AutoImport from 'unplugin-auto-import/vite';
import Components from 'unplugin-vue-components/vite';
import { NaiveUiResolver } from 'unplugin-vue-components/resolvers';
import { visualizer } from 'rollup-plugin-visualizer';
// https://vitejs.dev/config/
export default defineConfig({
root: path.resolve(__dirname, 'ui/'),
envDir: path.resolve(__dirname),
envPrefix: "APP",
base: "./",
plugins: [
vue(),
viteCompression(),
AutoImport({
imports: [
'vue',
]
}),
Components({
resolvers: [NaiveUiResolver()]
}),
visualizer({
open: true,
})
],
resolve: {
alias: {
'@': path.resolve(__dirname, './ui/src'),
},
},
define: {
'process.env': process.env
},
optimizeDeps: {
include: [
"axios",
"crypto-js",
"vue",
"vue-router",
"vuex",
'lodash-es',
"css-doodle",
"naive-ui"
],
exclude: ['__INDEX__']
},
css: {
preprocessorOptions: {
scss: {
additionalData: '@import "@/styles/common.scss";',
}
}
},
build: {
reportCompressedSize: false,
outDir: path.resolve(__dirname, 'public/statics/build/admin'),
emptyOutDir: false,
sourcemap: false,
chunkSizeWarningLimit: 2500,
manifest: true,
minify: 'terser',
terserOptions: {
compress: {
drop_console: true,
drop_debugger: true,
},
output: {
comments: true,
},
},
rollupOptions: {
output: {
manualChunks(id) {
if (id.includes('node_modules')) {
return id
.toString()
.split('node_modules/')[1]
.split('/')[0]
.toString();
}
},
chunkFileNames: (chunkInfo) => {
const facadeModuleId = chunkInfo.facadeModuleId
? chunkInfo.facadeModuleId.split('/')
: [];
const fileName =
facadeModuleId[facadeModuleId.length - 2] || '[name]';
return `js/${fileName}/[name].[hash].js`;
}
}
}
}
})