Skip to content

compressAssets

在 Vite 构建完成后自动压缩输出目录中的文件,支持 gzip 和 brotli 两种压缩算法。

导入方式

typescript
// 子模块独立导入(推荐)
import { compressAssets } from '@meng-xi/vite-plugin/plugins/compress-assets'
import type { CompressAssetsOptions, CompressStats, CompressSummary } from '@meng-xi/vite-plugin/plugins/compress-assets'

// barrel 导入
import { compressAssets } from '@meng-xi/vite-plugin'

快速开始

typescript
import { defineConfig } from 'vite'
import { compressAssets } from '@meng-xi/vite-plugin'

export default defineConfig({
	plugins: [
		compressAssets({
			algorithm: 'gzip'
		})
	]
})

配置选项

选项类型默认值说明
algorithm'gzip' | 'brotli' | 'both''gzip'压缩算法
thresholdnumber1024最小压缩阈值(字节)
deleteOriginalFilebooleanfalse压缩后是否删除原始文件
includeExtensionsstring[]['.js', '.css', '.html', '.svg', '.json', '.xml', '.txt']需要压缩的文件扩展名
excludeExtensionsstring[][]需要排除的文件扩展名
excludePathsstring[][]需要排除的路径前缀
compressionLevelnumber9gzip 压缩级别(1-9)
brotliQualitynumber11brotli 压缩质量(1-11)
reportOutputstring | false'compress-report.json'压缩报告输出路径,false 不生成
parallelLimitnumber10并发压缩最大文件数
enabledbooleantrue启用插件
verbosebooleantrue显示详细日志
errorStrategy'throw' | 'log' | 'ignore''throw'错误处理策略

类型定义

CompressStats

单个文件的压缩统计信息。

属性类型说明
filestring原始文件路径
originalSizenumber原始文件大小(字节)
compressedSizenumber压缩后文件大小(字节)
rationumber压缩率百分比(0-100)
algorithm'gzip' | 'brotli'使用的压缩算法

CompressSummary

压缩操作的汇总统计信息。

属性类型说明
totalFilesnumber压缩的文件总数
totalOriginalSizenumber所有文件的原始大小总和
totalCompressedSizenumber所有文件的压缩后大小总和
totalRationumber总体压缩率百分比
gzipFilesnumber使用 gzip 压缩的文件数量
brotliFilesnumber使用 brotli 压缩的文件数量
executionTimenumber压缩操作总耗时(毫秒)
statsCompressStats[]每个文件的详细压缩统计

示例

使用 brotli 压缩

typescript
compressAssets({ algorithm: 'brotli' })

同时生成 gzip 和 brotli

typescript
compressAssets({
	algorithm: 'both',
	threshold: 2048,
	compressionLevel: 9,
	brotliQuality: 11
})

压缩后删除原始文件

typescript
compressAssets({
	deleteOriginalFile: true,
	reportOutput: 'compress-report.json'
})

自定义文件过滤

typescript
compressAssets({
	includeExtensions: ['.js', '.css'],
	excludePaths: ['assets/images'],
	parallelLimit: 5
})

仅生产环境启用

typescript
compressAssets({
	algorithm: 'gzip',
	enabled: process.env.NODE_ENV === 'production'
})

记录错误但不中断构建

typescript
compressAssets({
	algorithm: 'gzip',
	errorStrategy: 'log'
})

注意事项

  • 使用 enforce: 'post' 确保在构建产物写入完成后执行
  • algorithm: 'both' 时会同时生成 .gz.br 文件
  • threshold 设为 0 将压缩所有文件(不推荐,极小文件压缩后可能更大)
  • deleteOriginalFile: true 时仅保留压缩版本,需确保服务器支持对应的压缩格式
  • 压缩报告包含每个文件的压缩率和总体统计,便于优化配置
  • 并发压缩通过 parallelLimit 控制资源占用,默认 10 个并发

Released under the MIT License.