Prepare compressed versions of assets to serve them with Content-Encoding.
This module requires a minimum of Node v6.9.0 and Webpack v4.0.0.
To begin, you'll need to install compression-webpack-plugin
:
$ npm install compression-webpack-plugin --save-dev
Then add the plugin to your webpack
config. For example:
webpack.config.js
const CompressionPlugin = require('compression-webpack-plugin');
module.exports = {
plugins: [
new CompressionPlugin()
]
}
And run webpack
via your preferred method.
Type: String|RegExp|Array<String|RegExp>
Default: undefined
Test to match files against.
// in your webpack.config.js
new CompressionPlugin({
test: /\.js(\?.*)?$/i
})
Type: String|RegExp|Array<String|RegExp>
Default: undefined
Files to include.
// in your webpack.config.js
new CompressionPlugin({
include: /\/includes/
})
Type: String|RegExp|Array<String|RegExp>
Default: undefined
Files to exclude.
// in your webpack.config.js
new CompressionPlugin({
exclude: /\/excludes/
})
Type: Boolean|String
Default: false
Enable file caching.
The default path to cache directory: node_modules/.cache/compression-webpack-plugin
.
Enable/disable file caching.
// in your webpack.config.js
new CompressionPlugin({
cache: true
})
Enable file caching and set path to cache directory.
// in your webpack.config.js
new CompressionPlugin({
cache: 'path/to/cache'
})
Type: String|Function
Default: [path].gz[query]
The target asset filename.
[file]
is replaced with the original asset filename.
[path]
is replaced with the path of the original asset.
[query]
is replaced with the query.
// in your webpack.config.js
new CompressionPlugin({
filename: '[path].gz[query]'
})
// in your webpack.config.js
new CompressionPlugin({
filename(info) {
// info.file is the original asset filename
// info.path is the path of the original asset
// info.query is the query
return `${info.path}.gz${info.query}`
}
})
Type: String|Function
Default: gzip
The compression algorithm/function.
The algorithm is taken from zlib.
// in your webpack.config.js
new CompressionPlugin({
algorithm: 'gzip'
})
Allow to specify a custom compression function.
// in your webpack.config.js
new CompressionPlugin({
algorithm(input, compressionOptions, callback) {
return compressionFunction(input, compressionOptions, callback);
}
})
Type: Object
Default: { level: 9 }
If you use custom function for the algorithm
option, the default value is {}
.
Compression options. You can find all options here zlib.
// in your webpack.config.js
new CompressionPlugin({
compressionOptions: { level: 1 }
})
Type: Number
Default: 0
Only assets bigger than this size are processed. In bytes.
// in your webpack.config.js
new CompressionPlugin({
threshold: 8192
})
Type: Number
Default: 0.8
Only assets that compress better than this ratio are processed (minRatio = Compressed Size / Original Size
).
Example: you have image.png
file with 1024b size, compressed version of file has 768b size, so minRatio
equal 0.75
.
In other words assets will be processed when the Compressed Size / Original Size
value less minRatio
value.
You can use 1
value to process all assets.
// in your webpack.config.js
new CompressionPlugin({
minRatio: 0.8
})
Type: Boolean
Default: false
Whether to delete the original assets or not.
// in your webpack.config.js
new CompressionPlugin({
deleteOriginalAssets: true
})
Prepare compressed versions of assets using zopfli
library.
ℹ️
@gfx/zopfli
require minimum8
version ofnode
.
To begin, you'll need to install @gfx/zopfli
:
$ npm install @gfx/zopfli --save-dev
webpack.config.js
const zopfli = require('@gfx/zopfli');
module.exports = {
plugins: [
new CompressionPlugin({
compressionOptions: {
numiterations: 15
},
algorithm(input, compressionOptions, callback) {
return zopfli.gzip(input, compressionOptions, callback);
}
})
]
}
Please take a moment to read our contributing guidelines if you haven't yet done so.