-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathvite.config.ts
172 lines (168 loc) · 7.12 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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
/*
* @Descripttion:
* @version:
* @Author: zhoukai
* @Date: 2022-11-28 16:42:22
* @LastEditors: zhoukai
* @LastEditTime: 2023-02-02 09:46:13
*/
import { fileURLToPath, URL } from 'node:url';
import { defineConfig, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';
import vueJsx from '@vitejs/plugin-vue-jsx';
import { createHtmlPlugin } from 'vite-plugin-html';
// 自动导入 API vite插件。文档地址:https://github.com/antfu/unplugin-auto-import
import AutoImport from 'unplugin-auto-import/vite';
// 按需自动加载组件
import Components from 'unplugin-vue-components/vite';
import { NaiveUiResolver } from 'unplugin-vue-components/resolvers';
import { visualizer } from 'rollup-plugin-visualizer';
/**
* * unocss插件,原子css
* https://github.com/antfu/unocss
*/
import Unocss from 'unocss/vite';
const RegImg = /\.(png|jpe?g|gif|svg)(\?.*)?$/;
const RegMedia = /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/;
const RegFonts = /\.(woff2?|eot|ttf|otf)(\?.*)?$/;
// https://vitejs.dev/config/
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export default defineConfig(({ command, mode }) => {
// 根据当前工作目录中的 `mode` 加载 .env 文件
// 设置第三个参数为 '' 来加载所有环境变量,而不管是否有 `VITE_` 前缀。
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const env = loadEnv(mode, process.cwd(), '');
return {
// 开发或生产环境服务的公共基础路径。
base: env.VITE_APP_PUBLIC_URL,
plugins: [
vue(),
vueJsx(),
Unocss(),
// 自动导入 API vite插件
// 以下导入的分别是vue(框架)以及官方生态库 vue-router、pinia 的相关api
// 如果你需要用到相关库的api,可在文件中直接使用而不需要再次import
// 注:有可能部分api未被自动导入,如果你直接使用时报错,请手动inport,如 vue-router 库的 createRouter,
AutoImport({
// targets to transform
include: [
/\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
/\.vue$/,
/\.vue\?vue/ // .vue
],
imports: [
// presets
'vue',
'vue-router',
'pinia',
// custom
{
'naive-ui': ['useDialog', 'useMessage', 'useNotification', 'useLoadingBar']
}
],
// Filepath to generate corresponding .d.ts file.
// Defaults to './auto-imports.d.ts' when `typescript` is installed locally.
// Set `false` to disable.
dts: 'src/auto-imports.d.ts',
// Generate corresponding .eslintrc-auto-import.json file.
// eslint globals Docs - https://eslint.org/docs/user-guide/configuring/language-options#specifying-globals
eslintrc: {
enabled: true, // Default `false`
filepath: './.eslintrc-auto-import.json', // Default `./.eslintrc-auto-import.json`
globalsPropValue: true // Default `true`, (true | false | 'readonly' | 'readable' | 'writable' | 'writeable')
}
}),
// 按需自动加载组件
Components({
resolvers: [NaiveUiResolver()]
}),
// 对html模板做压缩处理。文档【https://www.npmjs.com/package/vite-plugin-html】
createHtmlPlugin({
minify: true,
inject: {
data: {
title: 'vue3-pc-tmp'
}
}
}),
// rollup打包分析插件。文档【https://www.npmjs.com/package/rollup-plugin-visualizer】
env.VITE_APP_BUNDLE_ANALYZE === '1' &&
visualizer({
open: true,
gzipSize: true,
brotliSize: true
})
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
},
// esbuild配置。文档【https://cn.vitejs.dev/config/shared-options.html#esbuild】
esbuild: {
// 删除所有断点。
drop: env.VITE_APP_DROP_DEBUGGER === '1' ? ['debugger'] : [],
//删除console.log。
pure: env.VITE_APP_PURE_CONSOLE === '1' ? ['console.log'] : [],
// 移除代码注释
ignoreAnnotations: false,
legalComments: 'none'
},
// 构建选项
build: {
cssCodeSplit: false, //打包为一个 CSS 文件
//是指打包时先清空上一次构建生成的目录(outDir)。
emptyOutDir: true,
//指定生成静态资源的存放路径
assetsDir: 'assets',
//chunk 大小警告的限制, 单位kbs,超过这个范围会报警告。
chunkSizeWarningLimit: 1000,
// Rollup 打包配置
rollupOptions: {
plugins: [],
output: {
entryFileNames: 'assets/js/[name]-[hash].js',
chunkFileNames: 'assets/js/[name]-[hash].js',
// eslint-disable-next-line @typescript-eslint/no-unused-vars
// 按file type分包
assetFileNames: (assetInfo: { name?: string }) => {
// img
if (assetInfo.name && RegImg.test(assetInfo.name)) {
return 'assets/img/[name]-[hash][extname]';
}
// media
if (assetInfo.name && RegMedia.test(assetInfo.name)) {
return 'assets/media/[name]-[hash][extname]';
}
// fonts
if (assetInfo.name && RegFonts.test(assetInfo.name)) {
return 'assets/fonts/[name]-[hash][extname]';
}
return 'assets/[ext]/[name]-[hash][extname]';
},
// 分包配置,配置完成自动按需加载
manualChunks: {
vue: ['vue', 'vue-router', 'pinia'],
tool: ['qs'],
ui: ['naive-ui', 'unocss'],
axios: ['axios']
}
}
}
},
// 开发服务器选项
server: {
host: '0.0.0.0',
port: 24000,
hmr: true, //热更新
// 为开发服务器配置自定义代理规则。文档【https://cn.vitejs.dev/config/server-options.html#server-proxy】
proxy: {
'/proxy_url': {
target: env.VITE_APP_PROXY_URL,
changeOrigin: true,
rewrite: (path) => path.replace(/^\/proxy_url/, '')
}
}
}
};
});