Skip to content

compressAssets

Automatically compress files in the output directory after Vite build, supporting both gzip and brotli compression algorithms.

Import Methods

typescript
// Submodule import (recommended)
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
import { compressAssets } from '@meng-xi/vite-plugin'

Quick Start

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

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

Options

OptionTypeDefaultDescription
algorithm'gzip' | 'brotli' | 'both''gzip'Compression algorithm
thresholdnumber1024Minimum compression threshold (bytes)
deleteOriginalFilebooleanfalseWhether to delete original files after compression
includeExtensionsstring[]['.js', '.css', '.html', '.svg', '.json', '.xml', '.txt']File extensions to compress
excludeExtensionsstring[][]File extensions to exclude
excludePathsstring[][]Path prefixes to exclude
compressionLevelnumber9Gzip compression level (1-9)
brotliQualitynumber11Brotli compression quality (1-11)
reportOutputstring | false'compress-report.json'Compression report output path, false to skip
parallelLimitnumber10Maximum concurrent file compression count
enabledbooleantrueEnable the plugin
verbosebooleantrueShow detailed logs
errorStrategy'throw' | 'log' | 'ignore''throw'Error handling strategy

Type Definitions

CompressStats

Compression statistics for a single file.

PropertyTypeDescription
filestringOriginal file path
originalSizenumberOriginal file size (bytes)
compressedSizenumberCompressed file size (bytes)
rationumberCompression ratio percentage (0-100)
algorithm'gzip' | 'brotli'Compression algorithm used

CompressSummary

Summary statistics for the compression operation.

PropertyTypeDescription
totalFilesnumberTotal number of compressed files
totalOriginalSizenumberTotal original size of all files
totalCompressedSizenumberTotal compressed size of all files
totalRationumberOverall compression ratio percentage
gzipFilesnumberNumber of files compressed with gzip
brotliFilesnumberNumber of files compressed with brotli
executionTimenumberTotal compression time (ms)
statsCompressStats[]Detailed compression stats per file

Examples

Using Brotli Compression

typescript
compressAssets({ algorithm: 'brotli' })

Generate Both gzip and brotli

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

Delete Original Files After Compression

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

Custom File Filtering

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

Production Only

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

Log Errors Without Breaking Build

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

Notes

  • Uses enforce: 'post' to execute after build artifacts are written
  • algorithm: 'both' generates both .gz and .br files simultaneously
  • Setting threshold to 0 will compress all files (not recommended, as very small files may become larger after compression)
  • deleteOriginalFile: true keeps only compressed versions; ensure your server supports the corresponding compression formats
  • The compression report includes per-file compression ratios and overall statistics for configuration optimization
  • Concurrent compression is controlled via parallelLimit to manage resource usage, defaulting to 10 concurrent operations

Released under the MIT License.