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
  | import type { Plugin } from 'vite'; 
 |  import { isArray } from 'lodash'; 
 |  import compressPlugin from 'vite-plugin-compression'; 
 |    
 |  export const configCompressPlugin = (compress: ViteCompression): Plugin | Plugin[] => { 
 |    if (compress === 'none') return []; 
 |    
 |    const gz = { 
 |      // 生成的压缩包后缀 
 |      ext: '.gz', 
 |      // 体积大于threshold才会被压缩 
 |      threshold: 0, 
 |      // 默认压缩.js|mjs|json|css|html后缀文件,设置成true,压缩全部文件 
 |      filter: () => true, 
 |      // 压缩后是否删除原始文件 
 |      deleteOriginFile: false, 
 |    }; 
 |    const br = { 
 |      ext: '.br', 
 |      algorithm: 'brotliCompress', 
 |      threshold: 0, 
 |      filter: () => true, 
 |      deleteOriginFile: false, 
 |    }; 
 |    
 |    const codeList = [ 
 |      { k: 'gzip', v: gz }, 
 |      { k: 'brotli', v: br }, 
 |      { k: 'both', v: [gz, br] }, 
 |    ]; 
 |    
 |    const plugins: Plugin[] = []; 
 |    
 |    codeList.forEach((item) => { 
 |      if (compress.includes(item.k)) { 
 |        if (compress.includes('clear')) { 
 |          if (isArray(item.v)) { 
 |            item.v.forEach((vItem) => { 
 |              plugins.push(compressPlugin(Object.assign(vItem, { deleteOriginFile: true }))); 
 |            }); 
 |          } else { 
 |            plugins.push(compressPlugin(Object.assign(item.v, { deleteOriginFile: true }))); 
 |          } 
 |        } else { 
 |          if (isArray(item.v)) { 
 |            item.v.forEach((vItem) => { 
 |              plugins.push(compressPlugin(vItem)); 
 |            }); 
 |          } else { 
 |            plugins.push(compressPlugin(item.v)); 
 |          } 
 |        } 
 |      } 
 |    }); 
 |    
 |    return plugins; 
 |  }; 
 |  
  |