vben
2020-10-28 96021fad6d54ad79d8aa92f77c7bfa024f2449e4
提交 | 用户 | age
173d40 1 import type { UserConfig } from 'vite';
V 2
2f6253 3 import { resolve } from 'path';
4
173d40 5 import { modifyVars } from './build/config/lessModifyVars';
V 6 import { createProxy } from './build/vite/proxy';
7 import globbyTransform from './build/vite/plugin/context/transform';
2f6253 8
173d40 9 import { isDevFn, loadEnv } from './build/utils';
2f6253 10
173d40 11 import { createRollupPlugin, createVitePlugins } from './build/vite/plugin';
V 12
bb3b8f 13 const pkg = require('./package.json');
N 14
173d40 15 const viteEnv = loadEnv();
V 16
bb3b8f 17 const {
N 18   VITE_PORT,
19   VITE_PUBLIC_PATH,
20   VITE_PROXY,
8a1bfd 21   VITE_DROP_CONSOLE,
bb3b8f 22   // VITE_USE_CDN,
173d40 23 } = viteEnv;
2f6253 24
25 function pathResolve(dir: string) {
26   return resolve(__dirname, '.', dir);
27 }
28
29 const viteConfig: UserConfig = {
e8aede 30   /**
9ee0a5 31    * Entry. Use this to specify a js entry file in use cases where an
V 32    * `index.html` does not exist (e.g. serving vite assets from a different host)
33    * @default 'index.html'
34    */
7bd0b8 35   // TODO build error
V 36   // entry: './public/index.html',
9ee0a5 37   /**
e8aede 38    * 端口号
B 39    * @default '3000'
40    */
41   port: VITE_PORT,
2f6253 42   /**
43    * 服务地址
44    * @default 'localhost'
45    */
46   hostname: 'localhost',
47   /**
2f268c 48    * 运行自动打开浏览器·
2f6253 49    * @default 'false'
50    */
51   open: false,
52   /**
53    * 压缩代码
54    *  boolean | 'terser' | 'esbuild'
55    * @default 'terser'
56    */
66acb2 57   minify: isDevFn() ? 'esbuild' : 'terser',
2f6253 58   /**
e8aede 59    * 基本公共路径
2f6253 60    * @default '/'
61    */
e8aede 62   base: VITE_PUBLIC_PATH,
2f6253 63
64   /**
65    * 打包输入路径
66    * @default 'dist'
67    */
68   outDir: 'dist',
69   /**
70    * @default 'false'
71    */
72   sourcemap: false,
73   /**
74    * 资源输出路径
75    * @default '_assets'
76    */
77   assetsDir: '_assets',
78   /**
79    * 静态资源小于该大小将会内联,默认4096kb
80    * @default '4096'
81    */
82   assetsInlineLimit: 4096,
83   /**
84    * esbuild转换目标。
8a1bfd 85    * @default 'es2020'
2f6253 86    */
8a1bfd 87   esbuildTarget: 'es2020',
e8aede 88   silent: false,
2f6253 89   // 别名
90   alias: {
91     '/@/': pathResolve('src'),
8a1bfd 92   },
V 93   // terser配置
a9c2a2 94   terserOptions: {
8a1bfd 95     compress: {
V 96       // 是否删除console
97       drop_console: VITE_DROP_CONSOLE,
98     },
2f6253 99   },
bb3b8f 100   define: {
N 101     __VERSION__: pkg.version,
102   },
2f6253 103   // css预处理
104   cssPreprocessOptions: {
105     less: {
106       modifyVars: modifyVars,
107       javascriptEnabled: true,
108     },
109   },
968f79 110   // 会使用 rollup 对 包重新编译,将编译成符合 esm 模块规范的新的包放入 node_modules/.vite_opt_cache
2f6253 111   optimizeDeps: {
21d0ed 112     include: [
V 113       'echarts',
114       'echarts/map/js/china',
115       'ant-design-vue/es/locale/zh_CN',
116       '@ant-design/icons-vue',
117       'moment/locale/zh-cn',
118     ],
2f6253 119   },
8a1bfd 120
2f6253 121   // 本地跨域代理
e8aede 122   proxy: createProxy(VITE_PROXY),
173d40 123   plugins: createVitePlugins(viteEnv),
2f6253 124   rollupInputOptions: {
bb3b8f 125     // TODO
N 126     // external: VITE_USE_CDN ? externals : [],
173d40 127     plugins: createRollupPlugin(),
2f6253 128   },
129 };
130
8a1bfd 131 export default {
V 132   ...viteConfig,
133   transforms: [globbyTransform(viteConfig)],
134 } as UserConfig;