提交 | 用户 | 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'; |
bb3b8f
|
7 |
import { |
N |
8 |
// externals, |
|
9 |
cdnConf, |
|
10 |
} from './build/config/vite/cdn'; |
|
11 |
|
2f6253
|
12 |
import { createProxy } from './build/config/vite/proxy'; |
陈 |
13 |
import { createMockServer } from 'vite-plugin-mock'; |
|
14 |
import PurgeIcons from 'vite-plugin-purge-icons'; |
|
15 |
|
bb3b8f
|
16 |
import { isDevFn, isReportMode, isProdFn, loadEnv } from './build/utils'; |
N |
17 |
const pkg = require('./package.json'); |
|
18 |
|
|
19 |
const { |
|
20 |
VITE_USE_MOCK, |
|
21 |
VITE_PORT, |
|
22 |
VITE_PUBLIC_PATH, |
|
23 |
VITE_PROXY, |
|
24 |
VITE_GLOB_APP_TITLE, |
|
25 |
// VITE_USE_CDN, |
|
26 |
} = loadEnv(); |
2f6253
|
27 |
|
陈 |
28 |
function pathResolve(dir: string) { |
|
29 |
return resolve(__dirname, '.', dir); |
|
30 |
} |
e8aede
|
31 |
|
B |
32 |
const rollupPlugins: any[] = []; |
2f6253
|
33 |
const vitePlugins: VitePlugin[] = []; |
陈 |
34 |
|
|
35 |
(() => { |
|
36 |
if (isReportMode() && isProdFn()) { |
|
37 |
// report |
|
38 |
rollupPlugins.push( |
|
39 |
visualizer({ filename: './node_modules/.cache/stats.html', open: true }) as Plugin |
|
40 |
); |
|
41 |
} |
e8aede
|
42 |
if (isDevFn() && VITE_USE_MOCK) { |
2f6253
|
43 |
// open mock |
陈 |
44 |
vitePlugins.push( |
|
45 |
createMockServer({ |
|
46 |
ignore: /^\_/, |
|
47 |
mockPath: 'mock', |
|
48 |
}) |
|
49 |
); |
|
50 |
} |
|
51 |
})(); |
|
52 |
|
|
53 |
const viteConfig: UserConfig = { |
e8aede
|
54 |
/** |
B |
55 |
* 端口号 |
|
56 |
* @default '3000' |
|
57 |
*/ |
|
58 |
port: VITE_PORT, |
2f6253
|
59 |
/** |
陈 |
60 |
* 服务地址 |
|
61 |
* @default 'localhost' |
|
62 |
*/ |
|
63 |
hostname: 'localhost', |
|
64 |
/** |
2f268c
|
65 |
* 运行自动打开浏览器· |
2f6253
|
66 |
* @default 'false' |
陈 |
67 |
*/ |
|
68 |
open: false, |
|
69 |
/** |
|
70 |
* 压缩代码 |
|
71 |
* boolean | 'terser' | 'esbuild' |
|
72 |
* @default 'terser' |
|
73 |
*/ |
31e271
|
74 |
minify: 'terser', |
2f6253
|
75 |
/** |
e8aede
|
76 |
* 基本公共路径 |
2f6253
|
77 |
* @default '/' |
陈 |
78 |
*/ |
e8aede
|
79 |
base: VITE_PUBLIC_PATH, |
2f6253
|
80 |
|
陈 |
81 |
/** |
|
82 |
* 打包输入路径 |
|
83 |
* @default 'dist' |
|
84 |
*/ |
|
85 |
outDir: 'dist', |
|
86 |
/** |
|
87 |
* @default 'false' |
|
88 |
*/ |
|
89 |
sourcemap: false, |
|
90 |
/** |
|
91 |
* 资源输出路径 |
|
92 |
* @default '_assets' |
|
93 |
*/ |
|
94 |
assetsDir: '_assets', |
|
95 |
/** |
|
96 |
* 静态资源小于该大小将会内联,默认4096kb |
|
97 |
* @default '4096' |
|
98 |
*/ |
|
99 |
assetsInlineLimit: 4096, |
|
100 |
/** |
|
101 |
* esbuild转换目标。 |
2f268c
|
102 |
* @default 'es2019' |
2f6253
|
103 |
*/ |
2f268c
|
104 |
esbuildTarget: 'es2019', |
e8aede
|
105 |
silent: false, |
2f6253
|
106 |
// 别名 |
陈 |
107 |
alias: { |
|
108 |
'/@/': pathResolve('src'), |
|
109 |
}, |
bb3b8f
|
110 |
define: { |
N |
111 |
__VERSION__: pkg.version, |
|
112 |
}, |
2f6253
|
113 |
// css预处理 |
陈 |
114 |
cssPreprocessOptions: { |
|
115 |
less: { |
|
116 |
modifyVars: modifyVars, |
|
117 |
javascriptEnabled: true, |
|
118 |
}, |
|
119 |
}, |
|
120 |
// 配置Dep优化行为 |
|
121 |
// 会使用 rollup 对 包重新编译,将编译成符合 esm 模块规范的新的包放入 node_modules 下的 . |
|
122 |
optimizeDeps: { |
21d0ed
|
123 |
include: [ |
V |
124 |
'echarts', |
|
125 |
'echarts/map/js/china', |
|
126 |
'ant-design-vue/es/locale/zh_CN', |
|
127 |
'@ant-design/icons-vue', |
|
128 |
'moment/locale/zh-cn', |
|
129 |
], |
2f6253
|
130 |
}, |
陈 |
131 |
// 本地跨域代理 |
e8aede
|
132 |
proxy: createProxy(VITE_PROXY), |
2f6253
|
133 |
|
陈 |
134 |
plugins: [PurgeIcons(), ...vitePlugins], |
|
135 |
rollupOutputOptions: {}, |
|
136 |
rollupInputOptions: { |
bb3b8f
|
137 |
// TODO |
N |
138 |
// external: VITE_USE_CDN ? externals : [], |
2f6253
|
139 |
plugins: rollupPlugins, |
陈 |
140 |
}, |
|
141 |
}; |
|
142 |
|
bb3b8f
|
143 |
// 用于打包部署站点使用。实际项目可以删除 |
N |
144 |
const isSite = process.env.SITE === 'true'; |
|
145 |
// 扩展配置, 往打包后的html注入内容 |
|
146 |
// 只针对生产环境 |
|
147 |
// TODO 目前只是简单手动注入实现,后续vite应该会提供配置项 |
|
148 |
export const htmlConfig: { |
|
149 |
title: string; |
|
150 |
addHm?: boolean; |
|
151 |
cdnConf?: { |
|
152 |
css?: string[]; |
|
153 |
js?: string[]; |
|
154 |
}; |
|
155 |
useCdn: boolean; |
7c4dd2
|
156 |
minify: { |
N |
157 |
enable: boolean; |
|
158 |
removeComments: boolean; |
|
159 |
collapseWhitespace: boolean; |
|
160 |
minifyJS: boolean; |
|
161 |
minifyCSS: boolean; |
|
162 |
}; |
bb3b8f
|
163 |
} = { |
N |
164 |
// html title |
|
165 |
title: VITE_GLOB_APP_TITLE, |
|
166 |
// 百度统计,不需要可以删除 |
|
167 |
addHm: isSite, |
|
168 |
// 使用cdn打包 |
|
169 |
// TODO Cdn esm使用方式需要只能支持google,暂时关闭,后续查询更好的方式 |
|
170 |
useCdn: false, |
|
171 |
// useCdn: VITE_USE_CDN, |
|
172 |
// cdn列表 |
|
173 |
cdnConf, |
7c4dd2
|
174 |
minify: { |
N |
175 |
enable: true, |
|
176 |
removeComments: true, |
|
177 |
collapseWhitespace: true, |
|
178 |
minifyJS: true, |
|
179 |
minifyCSS: true, |
|
180 |
}, |
bb3b8f
|
181 |
}; |
2f6253
|
182 |
export default viteConfig; |