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'; import { createProxy } from './build/vite/proxy'; import pkg from './package.json'; import { format } from 'date-fns'; const { dependencies, devDependencies, name, version } = pkg; const __APP_INFO__ = { pkg: { dependencies, devDependencies, name, version }, lastBuildTime: format(new Date(), 'yyyy-MM-dd HH:mm:ss'), }; 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, VITE_PROXY } = 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), define: { __APP_INFO__: JSON.stringify(__APP_INFO__), }, // css: { // preprocessorOptions: { // less: { // modifyVars: {}, // javascriptEnabled: true, // additionalData: `@import "src/styles/var.less";`, // }, // }, // }, server: { host: true, port: VITE_PORT, hmr: true,//配置HMR proxy: createProxy(VITE_PROXY), // proxy: { // '/api': { // target: '', // changeOrigin: true, // rewrite: (path) => path.replace(/^\/api/, '/api/v1') // } // } }, optimizeDeps: { include: [], exclude: ['vue-demi'], }, build: { target: 'es2015', cssTarget: 'chrome80', outDir: OUTPUT_DIR, // terserOptions: { // compress: { // keep_infinity: true, // drop_console: VITE_DROP_CONSOLE, // }, // }, reportCompressedSize: false, chunkSizeWarningLimit: 2000, }, }; };