123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- import { defineConfig, loadEnv } from 'vite'
- import eslint from 'vite-plugin-eslint'
- import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
- import tsconfigPaths from 'vite-tsconfig-paths'
- import { vanillaExtractPlugin } from '@vanilla-extract/vite-plugin'
- import react from '@vitejs/plugin-react'
- import path from 'path'
- import { visualizer } from 'rollup-plugin-visualizer'
- export default defineConfig(({ mode }) => {
- // const env = loadEnv(mode, process.cwd(), '')
- // const base = env.VITE_APP_BASE_PATH || '/'
- const isProduction = mode === 'production'
- return {
- base: '/',
- plugins: [
- react({
- // 添加 React 插件的优化配置
- babel: {
- parserOpts: {
- plugins: ['decorators-legacy', 'classProperties']
- }
- }
- }),
- eslint({
- // 配置选项
- fix: true, // 自动修复 ESLint 错误
- include: ['src/**/*.js', 'src/**/*.jsx', 'src/**/*.ts', 'src/**/*.tsx'], // 检查的文件范围
- exclude: ['node_modules'], // 排除的文件
- cache: false, // 是否启用缓存
- emitError: true, // 是否将 ESLint 错误输出到控制台
- emitWarning: true // 是否将 ESLint 警告输出到控制台
- }),
- vanillaExtractPlugin({
- identifiers: ({ debugId }) => `${debugId}`
- }),
- tsconfigPaths(),
- createSvgIconsPlugin({
- iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
- symbolId: 'icon-[dir]-[name]'
- }),
- isProduction &&
- visualizer({
- open: true,
- gzipSize: true,
- brotliSize: true,
- template: 'treemap' // 使用树形图更直观
- })
- ].filter(Boolean),
- server: {
- open: true,
- host: true,
- port: 5657,
- proxy: {
- '/api': {
- target: 'https://pre.yaoeasier.com/',
- changeOrigin: true,
- rewrite: (path) => path.replace(/^\/api/, ''),
- secure: false
- }
- }
- },
- build: {
- target: 'esnext',
- minify: 'esbuild',
- sourcemap: !isProduction,
- cssCodeSplit: true,
- chunkSizeWarningLimit: 1500,
- rollupOptions: {
- output: {
- manualChunks: {
- 'vendor-core': ['react', 'react-dom', 'react-router'],
- 'vendor-ui': [
- 'antd',
- '@ant-design/icons',
- '@ant-design/cssinjs',
- 'framer-motion',
- 'styled-components'
- ],
- 'vendor-utils': ['axios', 'dayjs', 'i18next', 'zustand', '@iconify/react'],
- 'vendor-charts': ['apexcharts', 'react-apexcharts']
- }
- }
- }
- },
- resolve: {
- alias: {
- '@': path.join(__dirname, './src'),
- '#': path.join(__dirname, './types')
- }
- },
- // 优化依赖预构建
- optimizeDeps: {
- include: [
- 'react',
- 'react-dom',
- 'react-router',
- 'antd',
- '@ant-design/icons',
- 'axios',
- 'dayjs'
- ],
- exclude: ['@iconify/react'] // 排除不需要预构建的依赖
- },
- // esbuild 优化配置
- esbuild: {
- drop: isProduction ? ['console', 'debugger'] : [],
- legalComments: 'none',
- target: 'esnext'
- }
- }
- })
|