-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathvite.config.ts
109 lines (101 loc) · 2.64 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
/// <reference types="vitest" />
import viteVue from '@vitejs/plugin-vue'
import viteCssAutoPrefixer from 'autoprefixer'
import { visualizer as viteVisualizer } from 'rollup-plugin-visualizer'
import viteCssTailwind from 'tailwindcss'
import viteAutoImport from 'unplugin-auto-import/vite'
import viteComponents from 'unplugin-vue-components/vite'
import { VueRouterAutoImports } from 'unplugin-vue-router'
import viteVueRouter from 'unplugin-vue-router/vite'
import { fileURLToPath } from 'node:url'
import { defineConfig, loadEnv } from 'vite'
import viteCompress from 'vite-plugin-compression2'
import vueDevTools from 'vite-plugin-vue-devtools'
export default defineConfig(({ mode }) => {
const env = loadViteEnv(mode)
const isProd = mode === 'production'
const plugins = [
viteVueRouter(),
viteComponents({
dirs: ['src/shared/components']
}),
viteAutoImport({
include: [
/\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
/\.vue$/,
/\.vue\?vue/ // .vue
],
imports: [
'vue',
VueRouterAutoImports,
{
pinia: ['defineStore', 'storeToRefs', 'acceptHMRUpdate']
}
],
dts: true,
viteOptimizeDeps: true,
dirs: ['src/modules/account/store', 'src/modules/global/store', 'src/modules/user/store']
}),
viteVue({
template: {
compilerOptions: {
isCustomElement: (element) => element.startsWith('iconify-icon')
}
}
}),
vueDevTools()
]
if (isProd) {
plugins.push(
viteCompress({
algorithm: 'brotliCompress',
deleteOriginalAssets: false,
exclude: [/\.(png|avif|webp|jpe?g|gif)$/i, /\.map$/, /\.br$/]
}),
viteVisualizer()
)
}
return {
define: {
'process.env': JSON.stringify(env)
},
plugins,
css: {
postcss: {
plugins: [viteCssTailwind(), viteCssAutoPrefixer()]
}
},
test: {
environment: 'jsdom',
exclude: ['./__test__/benchmark/**/*', 'node_modules'],
setupFiles: ['./vitest.setup.ts'],
coverage: {
reporter: ['text', 'html', 'json']
}
},
server: {
port: +(process.env.PORT || '') || 3000
},
build: {
cssMinify: 'lightningcss'
},
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
}
}
})
function loadViteEnv(mode: string) {
const env = loadEnv(mode, process.cwd())
const viteEnvs = Object.entries(env).reduce(
(acc, [key, value]) => {
if (key.startsWith('VITE_')) {
acc[key] = value
}
return acc
},
{} as Record<string, string>
)
return viteEnvs
}