cpms_operation_platform/vite.config.ts

80 lines
2.2 KiB
TypeScript
Raw Permalink Normal View History

2026-07-14 10:31:17 +08:00
import { defineConfig, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';
import vueJsx from '@vitejs/plugin-vue-jsx';
2026-07-23 11:27:33 +08:00
import removeConsole from 'vite-plugin-remove-console';
import strip from '@rollup/plugin-strip';
2026-07-14 10:31:17 +08:00
import { resolve } from 'path';
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd(), '');
2026-07-23 11:27:33 +08:00
const isProd = mode === 'production';
2026-07-14 10:31:17 +08:00
return {
base: env.VITE_BASE_URL || '/',
2026-07-23 11:27:33 +08:00
plugins: [
vue(),
vueJsx(),
// 生产构建:移除 console.log / console.warn / console.error
isProd && removeConsole(),
// 生产构建:移除代码中的注释
isProd &&
strip({
include: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'],
}),
].filter(Boolean),
2026-07-14 10:31:17 +08:00
resolve: {
alias: {
'@': resolve(__dirname, 'src'),
},
},
css: {
modules: {
localsConvention: 'camelCaseOnly',
},
preprocessorOptions: {
less: {
javascriptEnabled: true,
},
},
},
server: {
host: '0.0.0.0',
2026-07-23 11:27:33 +08:00
port: 3000,
strictPort: false,
2026-07-14 10:31:17 +08:00
open: true,
proxy: {
'/api': {
target: env.VITE_API_BASE_URL || 'http://localhost:3000',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
},
},
},
build: {
outDir: 'dist',
sourcemap: mode !== 'production',
2026-07-23 11:27:33 +08:00
// 生产构建移除 console 和注释(esbuild minify 阶段)
minify: isProd ? 'esbuild' : false,
2026-07-14 10:31:17 +08:00
chunkSizeWarningLimit: 1500,
rollupOptions: {
output: {
2026-07-23 11:27:33 +08:00
// 更细粒度的分包,确保按需加载
manualChunks(id) {
if (id.includes('node_modules')) {
if (id.includes('ant-design-vue') || id.includes('@ant-design')) {
return 'antd';
}
if (id.includes('vue') || id.includes('@vue') || id.includes('vue-router')) {
return 'vue-vendor';
}
// 其他第三方依赖单独打包,未使用的不会进入
return 'vendor';
}
2026-07-14 10:31:17 +08:00
},
},
},
},
};
});