| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import { isArray } from 'lodash-es';
- import compressPlugin from 'vite-plugin-compression';
- import type { Plugin } from 'vite';
- export const configCompressPlugin = (compress: BuildCompression): Plugin | Plugin[] | null => {
- 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;
- };
|