| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | import type { UserConfig, ConfigEnv } from 'vite';import pkg from './package.json';import moment from 'moment';import { loadEnv } from 'vite';import { resolve } from 'path';import { generateModifyVars } from './build/generate/generateModifyVars';import { createProxy } from './build/vite/proxy';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);}const { dependencies, devDependencies, name, version } = pkg;const __APP_INFO__ = {  pkg: { dependencies, devDependencies, name, version },  lastBuildTime: moment().format('YYYY-MM-DD HH:mm:ss'),};export default ({ command, mode }: ConfigEnv): UserConfig => {  const root = process.cwd();  const env = loadEnv(mode, root);  // The boolean type read by loadEnv is a string. This function can be converted to boolean type  const viteEnv = wrapperEnv(env);  const { VITE_PORT, VITE_PUBLIC_PATH, VITE_PROXY, VITE_DROP_CONSOLE } = viteEnv;  const isBuild = command === 'build';  return {    base: VITE_PUBLIC_PATH,    root,    resolve: {      alias: [        {          find: 'vue-i18n',          replacement: 'vue-i18n/dist/vue-i18n.cjs.js',        },        // /@/xxxx => src/xxxx        {          find: /\/@\//,          replacement: pathResolve('src') + '/',        },        // /#/xxxx => types/xxxx        {          find: /\/#\//,          replacement: pathResolve('types') + '/',        },      ],    },    server: {      // Listening on all local IPs      host: true,      port: VITE_PORT,      // Load proxy configuration from .env      proxy: createProxy(VITE_PROXY),    },    build: {      target: 'es2015',      outDir: OUTPUT_DIR,      terserOptions: {        compress: {          keep_infinity: true,          // Used to delete console in production environment          drop_console: VITE_DROP_CONSOLE,        },      },      // Turning off brotliSize display can slightly reduce packaging time      brotliSize: false,      chunkSizeWarningLimit: 2000,    },    define: {      // setting vue-i18-next      // Suppress warning      __INTLIFY_PROD_DEVTOOLS__: false,      __APP_INFO__: JSON.stringify(__APP_INFO__),    },    css: {      preprocessorOptions: {        less: {          modifyVars: generateModifyVars(),          javascriptEnabled: true,        },      },    },    // The vite plugin used by the project. The quantity is large, so it is separately extracted and managed    plugins: createVitePlugins(viteEnv, isBuild),    optimizeDeps: {      // @iconify/iconify: The dependency is dynamically and virtually loaded by @purge-icons/generated, so it needs to be specified explicitly      include: [        '@iconify/iconify',        'ant-design-vue/es/locale/zh_CN',        'moment/dist/locale/zh-cn',        'ant-design-vue/es/locale/en_US',        'moment/dist/locale/eu',      ],      exclude: ['vue-demi'],    },  };};
 |