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_BASE_URL, VITE_DROP_CONSOLE, VITE_PORT, VITE_GLOB_PROD_MOCK } = viteEnv const prodMock = VITE_GLOB_PROD_MOCK const isBuild = command === 'build'; return { base: VITE_BASE_URL, esbuild: {}, resolve: { alias: [ { find: /\/#\//, replacement: pathResolve('types') + '/' }, { find: '@', replacement: pathResolve('src') + '/' }, ], }, 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, } } }