-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathvite.config.ts
140 lines (126 loc) · 3.6 KB
/
vite.config.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import react from '@vitejs/plugin-react'
import legacy from '@vitejs/plugin-legacy'
import { createHtmlPlugin } from 'vite-plugin-html'
import { visualizer } from 'rollup-plugin-visualizer'
import autoImport from 'unplugin-auto-import/vite'
import unocss from 'unocss/vite'
import postcssPresetEnv from 'postcss-preset-env'
import { defineConfig, loadEnv } from 'vite'
import { envDir, manualChunks, sourceDir } from './scripts/build'
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, envDir)
return {
/** 管理环境变量的配置文件存放目录 */
envDir,
/**
* 项目部署目录路径(静态资源引用路径,默认为"/")
*
* @description 见项目根目录下的 `config` 文件夹说明
*/
base: env.VITE_DEPLOY_BASE_URL,
/** 配置别名 */
resolve: {
alias: {
'@': sourceDir,
},
},
/** CSS */
css: {
modules: {
// generateScopedName: '[path][name]__[local]__[hash:5]',
// localsConvention: 'camelCaseOnly',
},
postcss: {
plugins: [postcssPresetEnv()],
},
less: {},
},
/** 配置代理 */
server: {
port: 5173,
open: '/survey-sage/',
host: true, // 支持 IP 访问
// 本地开发,启动 mock,更改 config/.env.dev 中的 axios 拦截器
proxy: {
'/devapi/v1': {
target: 'http://localhost:3001',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/devapi\/v1/, ''),
bypass(req, res, options) {
if (options.rewrite && req.url) {
const proxyUrl = new URL(
options.rewrite(req.url),
options.target as string,
).href
res.setHeader('x-req-proxyUrl', proxyUrl)
console.info(proxyUrl) // 服务器打印访问代理地址
}
},
},
},
},
/** 打包优化 */
build: {
rollupOptions: {
output: {
/**
* 打包优化,避免全部打包到一个很大的 Chunk 里
* @description 根据包名生成不同的 Chunk 文件,方便按需加载
*/
manualChunks,
chunkFileNames: 'static/js/[name]-[hash].js',
entryFileNames: 'static/js/[name]-[hash].js',
assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
},
},
minify: 'terser',
terserOptions: {
compress: {
drop_console: true,
drop_debugger: true,
},
},
chunkSizeWarningLimit: 500,
},
plugins: [
/** 基础插件 */
unocss(),
react(),
legacy({
targets: ['defaults', 'not IE 11'],
}),
/**
* 自动导入 API ,不用每次都 import
* @tips 如果直接使用没导入的 API 依然提示报错,请重启 VS Code
*/
autoImport({
imports: [
'react',
'react-router-dom',
{ classnames: ['default'] },
'ahooks',
],
dts: 'src/types/declaration-files/auto-import.d.ts',
eslintrc: {
enabled: true,
filepath: './.eslintrc-auto-import.json',
globalsPropValue: true,
},
}),
/** 为入口文件增加 EJS 模版能力 */
createHtmlPlugin({
minify: true,
inject: {
data: {
appTitle: env.VITE_APP_TITLE,
appDesc: env.VITE_APP_DESC,
appKeywords: env.VITE_APP_KEYWORDS,
},
},
}),
/** 打包分析 */
visualizer(),
],
}
})