A Metalsmith plugin that creates gzipped copies of the site's content. This is useful for website hosting on Amazon S3, where on the fly compression in the server is impossible.
$ npm install metalsmith-gzip
var Metalsmith = require('metalsmith');
var compress = require('metalsmith-gzip');
var metalsmith = new Metalsmith(__dirname)
.use(compress());
metalsmith-gzip
will gzip a file if the extension matches this regular expression:
/\.[html|css|js|json|xml|svg|txt]/
The choice of files to compress is loosely based on the HTML5 Boilerplate server configuration.
Pass an options object to customize metalsmith-gzip behaviour. These are the available options keys:
src
is a multimatch pattern which specifies which types of files to compress.
var metalsmith = new Metalsmith(__dirname)
.use(compress({src: ['**/*.js', '**/*.css']})); // only compresses JavaScript and CSS
gzip
is the same configuration object accepted by zlib.createGzip
(http://nodejs.org/api/zlib.html#zlib_options). For example, you can set the compression level:
var metalsmith = new Metalsmith(__dirname)
.use(compress({
src: ['**/*.js', '**/*.css'],
gzip: {level: 6}
}));
Add overwrite: true
to replace files with the compressed version instead of creating a copy with the '.gz' extension:
var metalsmith = new Metalsmith(__dirname)
.use(compress({overwrite: true});
You need to create a script to upload the gzipped versions of the files to your preferred hosting provider yourself. Take care to serve the files with the correct Content-Encoding.
This plugin was inspired by the Middleman gzip extension.