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
| import { fileURLToPath, URL } from 'node:url';
| import { ConfigEnv, UserConfig } from 'vite';
| import vue from '@vitejs/plugin-vue';
| import vueJsx from '@vitejs/plugin-vue-jsx';
| import compression from 'vite-plugin-compression';
| import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite';
| import vueDevTools from 'vite-plugin-vue-devtools';
| import { visualizer } from 'rollup-plugin-visualizer';
| import { proxy } from './src/config/proxy';
| import { cool } from '@cool-vue/vite-plugin';
|
| function toPath(dir: string) {
| return fileURLToPath(new URL(dir, import.meta.url));
| }
|
| // https://vitejs.dev/config
| export default ({ mode }: ConfigEnv): UserConfig => {
| const isDev = mode === 'development';
|
| return {
| plugins: [
| vue(),
| compression(),
| vueJsx(),
| // vueDevTools(),
| cool({
| type: 'admin',
| proxy,
| eps: {
| enable: true
| },
| svg: {
| skipNames: ['base', 'theme']
| },
| demo: mode == 'demo' // 是否开启演示模式
| }),
| // visualizer({
| // open: false,
| // gzipSize: true,
| // brotliSize: true
| // }),
| VueI18nPlugin({
| include: [toPath('./src/{modules,plugins}/**/locales/**')]
| })
| ],
| base: '/',
| server: {
| port: 9000,
| proxy,
| hmr: {
| overlay: true
| }
| },
| css: {
| preprocessorOptions: {
| scss: {
| charset: false,
| api: 'modern-compiler'
| }
| }
| },
| resolve: {
| alias: {
| '/@': toPath('./src'),
| '/$': toPath('./src/modules'),
| '/#': toPath('./src/plugins'),
| '/~': toPath('./packages')
| }
| },
| esbuild: {
| drop: isDev ? [] : ['console', 'debugger']
| },
| build: {
| minify: 'esbuild',
| // terserOptions: {
| // compress: {
| // drop_console: true,
| // drop_debugger: true
| // }
| // },
| sourcemap: isDev,
| rollupOptions: {
| output: {
| chunkFileNames: 'static/js/[name]-[hash].js',
| entryFileNames: 'static/js/[name]-[hash].js',
| assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
| manualChunks(id) {
| if (id.includes('node_modules')) {
| if (!['@cool-vue/crud'].find(e => id.includes(e))) {
| if (id.includes('prettier')) {
| return;
| }
|
| return id
| .toString()
| .split('node_modules/')[1]
| .replace('.pnpm/', '')
| .split('/')[0];
| } else {
| return 'comm';
| }
| }
| }
| }
| }
| }
| };
| };
|
|