mirror of
				https://github.com/pure-admin/vue-pure-admin.git
				synced 2025-11-03 13:44:47 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import type { Plugin } from "vite";
 | 
						||
import { isArray } from "@pureadmin/utils";
 | 
						||
import compressPlugin from "vite-plugin-compression";
 | 
						||
 | 
						||
export const configCompressPlugin = (
 | 
						||
  compress: ViteCompression
 | 
						||
): Plugin | Plugin[] => {
 | 
						||
  if (compress === "none") return null;
 | 
						||
 | 
						||
  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;
 | 
						||
};
 |