ludofischer / metalsmith-gzip

Metalsmith plugin for gzipping the output files.
MIT License
18 stars 3 forks source link

metalsmith-gzip

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.

Installation

$ npm install metalsmith-gzip

Usage

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.

Customization

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});

Deployment

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.

Acknowledgements

This plugin was inspired by the Middleman gzip extension.