generated from Sceat/app-starter
-
Notifications
You must be signed in to change notification settings - Fork 4
/
vite.config.js
118 lines (117 loc) · 2.72 KB
/
vite.config.js
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
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueI18n from '@intlify/unplugin-vue-i18n/vite'
import { nodePolyfills } from 'vite-plugin-node-polyfills'
import Icons from 'unplugin-icons/vite'
import { VitePWA } from 'vite-plugin-pwa'
import ViteYaml from '@modyfi/vite-plugin-yaml'
export default defineConfig({
server: {
watch: {
usePolling: true,
interval: 100,
},
},
build: {
target: 'esnext',
minify: 'terser',
terserOptions: {
compress: {
drop_console: true,
drop_debugger: true,
},
},
rollupOptions: {
onwarn(warning, warn) {
if (warning.code === 'EVAL') return
warn(warning)
},
output: {
assetFileNames: 'assets/[name]-[hash][extname]',
chunkFileNames: 'assets/[name]-[hash].js',
entryFileNames: 'assets/[name]-[hash].js',
},
},
chunkSizeWarningLimit: 2000,
sourcemap: false,
assetsInlineLimit: 4096,
cssCodeSplit: true,
},
esbuild: {
drop: ['console', 'debugger'],
legalComments: 'none',
},
plugins: [
vue(),
vueI18n({
runtimeOnly: true,
compositionOnly: true,
}),
ViteYaml(),
nodePolyfills({
include: [
'stream',
'events',
'path',
'timers/promises',
'util',
'crypto',
],
overrides: {
events: 'events-polyfill',
},
protocolImports: true,
}),
Icons({
autoInstall: true,
compiler: 'vue3',
}),
VitePWA({
includeAssets: [
'favicon.ico',
'robots.txt',
'*.png',
'*.jpg',
'*.svg',
'*.gif',
'*.glb',
'*.mp3',
'*.wav',
'*.ogg',
],
registerType: 'prompt',
workbox: {
navigateFallback: '/index.html',
navigateFallbackDenylist: [/\.html$/, /\/api\//],
cleanupOutdatedCaches: true,
runtimeCaching: [
{
urlPattern: /^https:\/\/fonts\.(?:googleapis|gstatic)\.com\/.*/i,
handler: 'CacheFirst',
options: {
cacheName: 'google-fonts-cache',
expiration: {
maxEntries: 20,
maxAgeSeconds: 31536000,
},
cacheableResponse: {
statuses: [0, 200],
},
},
},
{
urlPattern: /\.(?:png|jpg|jpeg|svg|gif|glb|mp3|wav|ogg)$/,
handler: 'StaleWhileRevalidate',
options: {
cacheName: 'assets-cache',
expiration: {
maxEntries: 300,
maxAgeSeconds: 2592000,
},
},
},
],
},
}),
],
})