vite.config.ts 2.39 KB
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import viteCompression from 'vite-plugin-compression' // TIP gzip压缩
import legacy from '@vitejs/plugin-legacy' // TIP 兼容性
const { resolve } = require('path')

// https://vitejs.dev/config/
export default ({command, mode}) => {
  const envConfig = loadEnv(mode, './');
  let isOpenSourceMap = mode === 'production'? false: true
  return defineConfig({
    plugins: [
      vue(),
      // viteCompression(),
      legacy({
        targets: ['> 1%, last 2 version, ie >= 11, chrome >= 69'],
        additionalLegacyPolyfills: ['regenerator-runtime/runtime'],
        polyfills: false
      })
    ],
    resolve: {
      alias: {
        '@': resolve('./src')
      },
    },
    define: {
      'process.env': {}
    },
    server: {
      base: envConfig.VITE_BASE_URL,
      open: false
    },
    css: {
      postcss: {
        plugins: [
          // TIP 关打包@charset must be the first rule in the file警告
          {
            postcssPlugin: 'internal:charset-removal',
            AtRule: {
              charset: (atRule) => {
                if (atRule.name === 'charset') {
                  atRule.remove();
                }
              }
            }
          }
        ]
      },
      preprocessorOptions: {
        scss: {
          // TIP 关打包@charset must be the first rule in the file警告
          charset: false,
          // TIP 全局使用scss变量
          additionalData: '@import "@/style/variable.scss";'
        }
      }
    },
    build: {
      sourcemap: false,
      manifest: false,
      target: 'esnext',
      outDir: 'dist',
      chunkSizeWarningLimit: 600,
      rollupOptions: {
        output: {
          manualChunks(id) {
            if (id.includes('node_modules')) {
              return id.toString().split('node_modules/')[1].split('/')[0].toString();
            }
          }
          // manualChunks: {
            // 'element-plus': ['element-plus'],
            // 'vue-router': ['vue-router'],
            // 'pinia': ['pinia'],
            // 'axios': ['axios'],
            // 'vue': ['vue'],
          // }
        }
      },
      // TIP 正式环境删除console和debugger
      terserOptions: {
        compress: {
          drop_console: mode === 'production'? true: false,
          drop_debugger: mode === 'production'? true: false
        }
      }
    },
  })
}