vben
2021-02-09 2b466eaf9a87233eeb906c2c46b5a0cd7fc9f99a
提交 | 用户 | age
99ac30 1 import type { UserConfig, ConfigEnv } from 'vite';
2f6253 2 import { resolve } from 'path';
99ac30 3 import vue from '@vitejs/plugin-vue';
V 4 import vueJsx from '@vitejs/plugin-vue-jsx';
5 import legacy from '@vitejs/plugin-legacy';
2f6253 6
bd7b53 7 import { loadEnv } from 'vite';
V 8
3d1681 9 import { generateModifyVars } from './build/config/themeConfig';
173d40 10 import { createProxy } from './build/vite/proxy';
bd7b53 11 import { wrapperEnv } from './build/utils';
99ac30 12 import { createVitePlugins } from './build/vite/plugin';
759e53 13 import { OUTPUT_DIR } from './build/constant';
173d40 14
bb3b8f 15 const pkg = require('./package.json');
2f6253 16
17 function pathResolve(dir: string) {
18   return resolve(__dirname, '.', dir);
19 }
20
759e53 21 const root = process.cwd();
6f8d75 22
99ac30 23 export default ({ command, mode }: ConfigEnv): UserConfig => {
bd7b53 24   const env = loadEnv(mode, root);
V 25   const viteEnv = wrapperEnv(env);
99ac30 26   const { VITE_PORT, VITE_PUBLIC_PATH, VITE_PROXY, VITE_DROP_CONSOLE, VITE_LEGACY } = viteEnv;
V 27
28   const isBuild = command === 'build';
29
bd7b53 30   return {
f24422 31     base: VITE_PUBLIC_PATH,
bd7b53 32     root,
9edc28 33     alias: [
V 34       {
35         find: /^\/@\//,
36         replacement: pathResolve('src') + '/',
37       },
38     ],
99ac30 39     server: {
V 40       port: VITE_PORT,
41       proxy: createProxy(VITE_PROXY),
42       hmr: {
43         overlay: true,
bd7b53 44       },
8a1bfd 45     },
1b71db 46
99ac30 47     build: {
759e53 48       outDir: OUTPUT_DIR,
7385ce 49       polyfillDynamicImport: VITE_LEGACY,
99ac30 50       terserOptions: {
V 51         compress: {
52           keep_infinity: true,
53           drop_console: VITE_DROP_CONSOLE,
54         },
55       },
1b71db 56       brotliSize: false,
3ba828 57       chunkSizeWarningLimit: 1200,
99ac30 58     },
bd7b53 59     define: {
V 60       __VERSION__: pkg.version,
61       // setting vue-i18-next
62       // Suppress warning
63       __VUE_I18N_LEGACY_API__: false,
64       __VUE_I18N_FULL_INSTALL__: false,
65       __INTLIFY_PROD_DEVTOOLS__: false,
2f6253 66     },
99ac30 67     css: {
V 68       preprocessorOptions: {
69         less: {
70           modifyVars: {
3509eb 71             // reference:  Avoid repeated references
99ac30 72             hack: `true; @import (reference) "${resolve('src/design/config.less')}";`,
3d1681 73             ...generateModifyVars(),
99ac30 74           },
V 75           javascriptEnabled: true,
116a1f 76         },
bd7b53 77       },
V 78     },
79
99ac30 80     plugins: [
V 81       vue(),
82       vueJsx(),
83       ...(VITE_LEGACY && isBuild ? [legacy()] : []),
9edc28 84       ...createVitePlugins(viteEnv, isBuild),
737b1b 85     ],
8a1bfd 86
99ac30 87     optimizeDeps: {
9edc28 88       include: ['@iconify/iconify'],
bd7b53 89     },
V 90   };
6f8d75 91 };