Détail du package

rollup-plugin-gzip

kryops371.5kMIT4.0.1

Compress your Rollup / Vite bundle with Gzip or Brotli

rollup, rollup-plugin, gzip, compress

readme

rollup-plugin-gzip

ci status

Creates a compressed .gz / .br artifact for your Rollup / Vite bundle.

COMPATIBILITY NOTE: This version is compatible with rollup >= 2.0.0

  • For rollup >= 0.60 - 1.x, use version 2.x of this plugin
  • For older versions of rollup, use version 1.x of this plugin

Installation

npm install --save-dev rollup-plugin-gzip

Usage

import { rollup } from 'rollup'
import gzipPlugin from 'rollup-plugin-gzip'

rollup({
  input: 'src/index.js',
  plugins: [gzipPlugin()],
}).then(/* ... */)

NOTE: This plugin is an ES module. If you import it using require(), you have to point to the default export via require('rollup-plugin-gzip').default

Configuration

filter RegExp | (fileName: string) => boolean

Control which of the output files to compress.

Defaults to /\.(js|mjs|cjs|json|css|html|wasm|svg)$/

gzipOptions object

GZIP compression options, see https://nodejs.org/api/zlib.html#zlib_class_options

minSize number

Specified the minimum size in Bytes for a file to get compressed. Files that are smaller than this threshold will not be compressed. This does not apply to the files specified through additionalFiles!

additionalFiles string[]

This option allows you to compress additional files outside of the main rollup bundling process.

additionalFilesDelay number

This options sets a delay (ms) before the plugin compresses the files specified through additionalFiles.

Defaults to 0 for Rollup >= 2.0.0, 2000 for older versions of Rollup

customCompression (content: string | Buffer) => string | Buffer | Promise<string | Buffer>

Set a custom compression algorithm. The function can either return the compressed contents synchronously, or otherwise return a promise for asynchronous processing.

fileName string | (fileName: string) => string

Set a custom file name convention for the compressed files. Can be a suffix string or a function returning the file name.

Defaults to ".gz"

Examples

NOTE: These examples use Rollup's JavaScript API. For Rollup configuration file examples, check out the /examples directory.

Brotli Compression

Since Node 11.7.0 you can use Node's built-in Brotli compression:

import { brotliCompress } from 'zlib'
import { promisify } from 'util'
import { rollup } from 'rollup'
import gzipPlugin from 'rollup-plugin-gzip'

const brotliPromise = promisify(brotliCompress)

rollup({
  input: 'src/index.js',
  plugins: [
    gzipPlugin({
      customCompression: content => brotliPromise(Buffer.from(content)),
      fileName: '.br',
    }),
  ],
}).then(/* ... */)

For Node < 11.7.0 you need the external brotli module:

import { compress } from 'brotli'
import { rollup } from 'rollup'
import gzipPlugin from 'rollup-plugin-gzip'

rollup({
  input: 'src/index.js',
  plugins: [
    gzipPlugin({
      customCompression: content => compress(Buffer.from(content)),
      fileName: '.br',
    }),
  ],
}).then(/* ... */)

Zopfli Compression

Zopfli support is available through several different external packages, each of which comes with advantages and disadvantages:

import { gzipSync } from 'node-zopfli'
import { rollup } from 'rollup'
import gzipPlugin from 'rollup-plugin-gzip'

rollup({
  input: 'src/index.js',
  plugins: [
    gzipPlugin({
      customCompression: content => gzipSync(Buffer.from(content)),
    }),
  ],
}).then(/* ... */)
  • @gfx/zopfli - WebAssembly version, faster installation, slower compression
import { gzipAsync } from '@gfx/zopfli'
import { rollup } from 'rollup'
import gzipPlugin from 'rollup-plugin-gzip'

rollup({
  input: 'src/index.js',
  plugins: [
    gzipPlugin({
      customCompression: content =>
        gzipAsync(Buffer.from(content), { numiterations: 15 }),
    }),
  ],
}).then(/* ... */)

Compressing into multiple formats

To support compressing your bundle into multiple different formats, you can add this plugin multiple times with different configurations:

import { brotliCompress } from 'zlib'
import { promisify } from 'util'
import { rollup } from 'rollup'
import gzipPlugin from 'rollup-plugin-gzip'

const brotliPromise = promisify(brotliCompress)

rollup({
  input: 'src/index.js',
  plugins: [
    // GZIP compression as .gz files
    gzipPlugin(),
    // Brotil compression as .br files
    gzipPlugin({
      customCompression: content => brotliPromise(Buffer.from(content)),
      fileName: '.br',
    }),
  ],
}).then(/* ... */)

License

MIT

changelog

Changelog

v4.0.0 (2024-07-21)

MAYBE BREAKING CHANGES

  • Switch to type: "module" (#22)

v3.1.2 (2024-03-15)

  • Fix support for sourcemap: 'hidden' (#21)

v3.1.1 (2023-12-28)

  • Compress .svg files by default (#20)

v3.1.0 (2022-10-23)

  • Add support for Rollup 3

v3.0.1 (2022-04-02)

  • Compress .cjs and .wasm files by default (#19)

v3.0.0 (2021-11-13)

BREAKING CHANGES

  • Drop support for rollup version < 2.0.0

New features

  • Vite compatibility (#18)

v2.5.0 (2020-05-06)

v2.4.0 (2020-04-10)

  • Provide conditional module exports for ESM (#12)
  • Default additionalFilesDelay to 0 for Rollup >= 2.0.0 (#9)

v2.3.0 (2020-02-02)

  • Add type: 'asset' to bundle asset entries for rollup >= 1.21.0

v2.2.0 (2018-12-29)

  • Add support for rollup 1.0.0

v2.1.0 (2018-12-19)

v2.0.0 (2018-07-28)

BREAKING CHANGES

  • Drop support for rollup version < 0.60.0
  • Drop algorithm option. Use customCompression instead
  • Rename options option to gzipOptions
  • Rename additional option to additionalFiles
  • Rename delay option to additionalFilesDelay

New Features

  • Add filter option to control which chunks should be compressed
  • Add customCompression option for providing a custom compression algorithm
  • Add fileName option for controlling the compressed file names (defaults to .gz)

Internal Changes

  • Convert code base to TypeScript
  • Add linting and auto-formatting

v1.4.0 (2018-06-29)

  • Add experimental support for compressing chunks when using code splitting
  • Add delay option for additional files that are written outside the plugin lifecycle
  • Assume a default delay of 5000ms in rollup 0.60.0-0.62.0 as a workaround for changed behavior (fixes #2)
  • Remove dependency to node-zopfli to prevent installing it by default which is failing at the moment (fixes #3)

v1.3.0 (2017-08-21)

  • Compatibility with rollup 0.48
  • Update TypeScript typings

v1.2.0 (2017-06-17)

Added algorithm: 'zopfli'

v1.1.0 (2017-04-08)

Added TypeScript typings

v1.0.0 (2017-01-19)

Initial release