import type { UserConfig, ConfigEnv } from 'vite'; import { loadEnv } from 'vite'; import { resolve } from 'path'; import { wrapperEnv } from './build/utils'; import { createVitePlugins } from './build/vite/plugin'; import { OUTPUT_DIR } from './build/constant'; function pathResolve(dir: string) { return resolve(process.cwd(), '.', dir); } export default ({ command, mode }: ConfigEnv): UserConfig => { const root = process.cwd(); const env = loadEnv(mode, root); const viteEnv = wrapperEnv(env); const { VITE_PUBLIC_PATH, VITE_DROP_CONSOLE, VITE_PORT, VITE_GLOB_PROD_MOCK } = viteEnv; const prodMock = VITE_GLOB_PROD_MOCK; const isBuild = command === 'build'; return { base: VITE_PUBLIC_PATH, esbuild: {}, resolve: { alias: [ { find: /\/#\//, replacement: pathResolve('types') + '/', }, { find: '@', replacement: pathResolve('src') + '/', }, ], dedupe: ['vue'], }, plugins: createVitePlugins(viteEnv, isBuild, prodMock), css: { preprocessorOptions: { less: { modifyVars: {}, javascriptEnabled: true, additionalData: `@import "src/styles/global.less";`, }, scss: { additionalData: `@import "src/styles/global.less";`, }, }, }, server: { port: VITE_PORT, // proxy: { // '/api': { // target: '', // changeOrigin: true, // rewrite: (path) => path.replace(/^\/api/, '/api/v1') // } // } }, optimizeDeps: { include: [], exclude: ['vue-demi'], }, build: { target: 'es2015', outDir: OUTPUT_DIR, terserOptions: { compress: { keep_infinity: true, drop_console: VITE_DROP_CONSOLE, }, }, brotliSize: false, chunkSizeWarningLimit: 2000, }, }; };