vite-plugin-compress
raw JSON → 2.1.1 verified Mon Apr 27 auth: no javascript
Vite plugin to compress bundle and assets using Brotli, SVGO, and imagemin. Current stable version is 2.1.1, with a release cadence of major and minor patches. Key differentiators: compression of Vite-generated assets and public folder files, SVG and PNG optimization, respect for MTU threshold (1501 bytes), and compatibility with vite-ssr. Alternatives include rollup-plugin-compress but this is Vite-native.
Common errors
error Error: The plugin 'vite-plugin-compress' doesn't appear to be a valid Vite plugin. ↓
cause Using named import { compress } instead of default import in v2.
fix
Use: import compress from 'vite-plugin-compress'
error [vite-plugin-compress] Could not find module 'imagemin-pngquant' ↓
cause Missing peer dependency for PNG optimization.
fix
Install imagemin-pngquant: npm install imagemin-pngquant
error TypeError: compress is not a function ↓
cause Importing as a named export when using CommonJS require in ESM context.
fix
Use default import: import compress from 'vite-plugin-compress'
error Error: Cannot find module 'vite-plugin-compress' ↓
cause Package not installed or not added to package.json.
fix
Run: npm install vite-plugin-compress
Warnings
breaking Default exported function changed from named export to default export in v2 ↓
fix Use import compress from 'vite-plugin-compress' instead of import { compress } from 'vite-plugin-compress'
gotcha Files smaller than threshold (default 1501 bytes) are not compressed; this may cause confusion if expecting all files to be compressed. ↓
fix Set threshold: 0 to compress all files regardless of size
deprecated The 'brotli' option defaults to true; setting it to false disables Brotli compression but may leave files uncompressed. ↓
fix Explicitly set brotli: true if you want Brotli compression (no change needed), or set brotli: false if you want to disable it
gotcha SVG optimization by default removes dimensions; may break layout if relying on viewBox and dimensions. ↓
fix Override svgo plugins: [{ removeDimensions: false }]
gotcha PNG optimization uses imagemin-pngquant; may produce banding if quality settings are too aggressive. ↓
fix Set pngquant quality range e.g. quality: [0.6, 0.8] for better results
gotcha Plugin compresses both Vite-generated assets and public folder files; public files are compressed in-place which may affect development workflow. ↓
fix Exclude specific public files using the 'exclude' option
breaking v1.x and v2.x are incompatible due to import pattern change; migration required. ↓
fix Update import statement: from 'import { compress }' to 'import compress'
Install
npm install vite-plugin-compress yarn add vite-plugin-compress pnpm add vite-plugin-compress Imports
- compress wrong
const compress = require('vite-plugin-compress')correctimport compress from 'vite-plugin-compress' - compress wrong
import { compress } from 'vite-plugin-compress'correctimport compress from 'vite-plugin-compress' - CompressOptions
import type { CompressOptions } from 'vite-plugin-compress'
Quickstart
// vite.config.ts
import compress from 'vite-plugin-compress'
export default {
plugins: [
compress({
quality: 11,
threshold: 1501,
exclude: ['ssr-manifest.json'],
extensions: ['.html', '.js', '.css', '.svg', '.json'],
svgo: { plugins: [{ removeViewBox: false, removeDimensions: true }] },
pngquant: { quality: [0.6, 0.8] },
brotli: true,
verbose: true
}),
],
}