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/compress-assets'
import type { CompressAssetsOptions, CompressStats, CompressSummary } from '@meng-xi/vite-plugin/plugins/compress/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

Inherits BasePluginOptions: enabled, verbose, errorStrategy

Advanced Options ​

OptionTypeDefaultDescription
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

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.