nebv
2020-10-11 03b6025d07e4df99474f80d3fa57e8b5238ba40c
提交 | 用户 | age
2f6253 1 import { resolve } from 'path';
2
3 import type { UserConfig, Plugin as VitePlugin } from 'vite';
4
5 import visualizer from 'rollup-plugin-visualizer';
6 import { modifyVars } from './build/config/glob/lessModifyVars';
7 import { setupBasicEnv } from './build/config/vite/env';
8 import { createProxy } from './build/config/vite/proxy';
9 import { createMockServer } from 'vite-plugin-mock';
10 import PurgeIcons from 'vite-plugin-purge-icons';
11 import { isDevFn, isReportMode, isProdFn, loadEnv } from './build/utils';
12
13 setupBasicEnv();
e8aede 14 const { VITE_USE_MOCK, VITE_PORT, VITE_PUBLIC_PATH, VITE_PROXY } = loadEnv();
2f6253 15
16 function pathResolve(dir: string) {
17   return resolve(__dirname, '.', dir);
18 }
e8aede 19
B 20 const rollupPlugins: any[] = [];
2f6253 21 const vitePlugins: VitePlugin[] = [];
22
23 (() => {
24   if (isReportMode() && isProdFn()) {
25     // report
26     rollupPlugins.push(
27       visualizer({ filename: './node_modules/.cache/stats.html', open: true }) as Plugin
28     );
29   }
e8aede 30   if (isDevFn() && VITE_USE_MOCK) {
2f6253 31     // open mock
32     vitePlugins.push(
33       createMockServer({
34         ignore: /^\_/,
35         mockPath: 'mock',
36       })
37     );
38   }
39 })();
40
41 const viteConfig: UserConfig = {
e8aede 42   /**
B 43    * 端口号
44    * @default '3000'
45    */
46   port: VITE_PORT,
2f6253 47   /**
48    * 服务地址
49    * @default 'localhost'
50    */
51   hostname: 'localhost',
52   /**
2f268c 53    * 运行自动打开浏览器·
2f6253 54    * @default 'false'
55    */
56   open: false,
57   /**
58    * 压缩代码
59    *  boolean | 'terser' | 'esbuild'
60    * @default 'terser'
61    */
62   minify: isDevFn() ? false : 'terser',
63   /**
e8aede 64    * 基本公共路径
2f6253 65    * @default '/'
66    */
e8aede 67   base: VITE_PUBLIC_PATH,
2f6253 68
69   /**
70    * 打包输入路径
71    * @default 'dist'
72    */
73   outDir: 'dist',
74   /**
75    * @default 'false'
76    */
77   sourcemap: false,
78   /**
79    * 资源输出路径
80    * @default '_assets'
81    */
82   assetsDir: '_assets',
83   /**
84    * 静态资源小于该大小将会内联,默认4096kb
85    * @default '4096'
86    */
87   assetsInlineLimit: 4096,
88   /**
89    * esbuild转换目标。
2f268c 90    * @default 'es2019'
2f6253 91    */
2f268c 92   esbuildTarget: 'es2019',
e8aede 93   silent: false,
2f6253 94   // 别名
95   alias: {
96     '/@/': pathResolve('src'),
97   },
98   // define: {
99   //   __ENV__: 'value',
100   // },
101   // css预处理
102   cssPreprocessOptions: {
103     less: {
104       modifyVars: modifyVars,
105       javascriptEnabled: true,
106     },
107   },
108   // 配置Dep优化行为
109   // 会使用 rollup 对 包重新编译,将编译成符合 esm 模块规范的新的包放入 node_modules 下的 .
110   optimizeDeps: {
111     include: ['ant-design-vue/es/locale/zh_CN', '@ant-design/icons-vue', 'moment/locale/zh-cn'],
112   },
113   // 本地跨域代理
e8aede 114   proxy: createProxy(VITE_PROXY),
2f6253 115
116   plugins: [PurgeIcons(), ...vitePlugins],
117   rollupOutputOptions: {},
118   rollupInputOptions: {
119     plugins: rollupPlugins,
120   },
121 };
122
123 export default viteConfig;