-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathvite.config.ts
More file actions
85 lines (83 loc) · 2.4 KB
/
vite.config.ts
File metadata and controls
85 lines (83 loc) · 2.4 KB
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
import tailwindcss from '@tailwindcss/vite'
import { tanstackStart } from '@tanstack/react-start/plugin/vite'
import viteReact from '@vitejs/plugin-react'
import { defineConfig } from 'vite'
import viteTsConfigPaths from 'vite-tsconfig-paths'
const config = defineConfig(({ mode }) => ({
plugins: [
// this is the plugin that enables path aliases
viteTsConfigPaths({
projects: ['./tsconfig.json'],
}),
tailwindcss(),
tanstackStart({
customViteReactPlugin: true,
target: 'cloudflare-module',
}),
viteReact(),
],
define: {
__DEV__: JSON.stringify(mode === 'development'),
},
build: {
minify: 'terser',
terserOptions: {
compress: {
drop_console: true,
drop_debugger: true,
unused: true,
dead_code: true,
pure_funcs: ['console.log', 'console.info', 'console.debug', 'console.warn'],
passes: 2,
},
mangle: {
safari10: true,
},
},
rollupOptions: {
treeshake: {
preset: 'recommended',
moduleSideEffects: false,
},
external: (id) => {
// Exclude development dependencies from production build
if (mode === 'production') {
return id.includes('@tanstack/react-devtools') ||
id.includes('@tanstack/react-router-devtools');
}
return false;
},
output: {
manualChunks: (id) => {
if (id.includes('node_modules')) {
if (id.includes('react') || id.includes('react-dom')) {
return 'vendor';
}
if (id.includes('@tanstack/react-router')) {
return 'router';
}
if (id.includes('lucide-react')) {
return 'icons';
}
if (id.includes('web-vitals')) {
return 'analytics';
}
return 'vendor';
}
},
assetFileNames: (assetInfo) => {
if (!assetInfo.name) return `assets/[name]-[hash][extname]`
const info = assetInfo.name.split('.')
const ext = info[info.length - 1]
if (/png|jpe?g|svg|gif|tiff|bmp|ico/i.test(ext)) {
return `img/[name]-[hash][extname]`
}
return `assets/[name]-[hash][extname]`
},
chunkFileNames: 'js/[name]-[hash].js',
entryFileNames: 'js/[name]-[hash].js',
},
},
},
}))
export default config