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; };