tapi/z_ele/vite.config.ts
2025-08-29 13:45:50 +08:00

85 lines
2.0 KiB
TypeScript

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import { resolve } from 'path';
import Compression from 'vite-plugin-compression';
import Components from 'unplugin-vue-components/vite';
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
import { EleAdminResolver } from 'ele-admin-plus/es/utils/resolvers';
import GenSW from 'workbox-webpack-plugin';
export default defineConfig(({ command }) => {
const isBuild = command === 'build';
const alias = {
'@/': resolve('src') + '/',
'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js'
};
const plugins = [
vue(),
new GenSW.GenerateSW({
// 配置选项
swDest: 'service-worker.js', // Service Worker 的输出文件路径
clientsClaim: true,
skipWaiting: true,
exclude: [/\.map$/, /asset-manifest\.json$/], // 可选:排除某些文件
})
];
if (isBuild) {
// 组件按需引入
plugins.push(
Components({
dts: false,
resolvers: [
ElementPlusResolver({
importStyle: 'sass'
}),
EleAdminResolver({
importStyle: 'sass'
})
]
})
);
// gzip压缩
plugins.push(
Compression({
disable: !isBuild,
threshold: 10240,
algorithm: 'gzip',
ext: '.gz'
})
);
} else {
// 开发环境全局安装
alias['./as-needed'] = './global-import';
}
return {
base: '',
resolve: { alias },
plugins,
server: {
allowedHosts: ['a.tcp.run']
},
css: {
preprocessorOptions: {
scss: {
additionalData: `@use "@/styles/variables.scss" as *;`
}
}
},
optimizeDeps: {
include: [
'echarts/core',
'echarts/charts',
'echarts/renderers',
'echarts/components',
'vue-echarts',
'echarts-wordcloud',
'sortablejs',
'vuedraggable'
]
},
build: {
target: 'chrome63',
chunkSizeWarningLimit: 4000
}
};
});