1.0.0 • Published 4 years ago

asset-compressor v1.0.0

Weekly downloads
44
License
MIT
Repository
github
Last release
4 years ago

Asset Compressor

A very simple utility to compress all your assets into Brotli & Gzip ready to be served via webserver.

Usage

const compressAssets = require('asset-compressor');
const options = {
    dirs: ["public/img"],
    threshold: 5 * 1024,
    minRatio: 0.9,
    onProcessed: (file) => {
        console.log("c", file);
    },
    onBrotliProcessed: (file) => {
        console.log("a", file);
    },
    onGzipProcessed: (file) => {
        console.log("b", file)
    }
};

compressAssets(options).then(() => console.log("Completed!"));
  • The application will traverse through the directories given in options.dirs recursively and find all assets that can be compressed with better ratio than options.minRatio
  • For each file
    • It tries to first generate the Gzip version of the file with *.gz file extension. On each completed gzip, it tries to call options.onGzipProcessed if present. It also logs the result into the console in human readable format.
    • Then it tries to generate the Brotli version of the file with *.br file extension. After finishing, it tries to call option.onBrotliProcessed. It also logs the result into the console in human readable format.
    • It then calls the options.onProcessed with object including filePath, skipped (true|false), brotli (object), gzip (object)

Typical usage with apache2

# Specify gzip-encoded assets
<Files *.js.gz>
    AddType "text/javascript" .gz
    AddEncoding gzip .gz
</Files>
<Files *.css.gz>
    AddType "text/css" .gz
    AddEncoding gzip .gz
</Files>
<Files *.svg.gz>
    AddType "image/svg+xml" .gz
    AddEncoding gzip .gz
</Files>
<Files *.png.gz>
    AddType "image/png" .gz
    AddEncoding gzip .gz
</Files>
<Files *.jpg.gz>
    AddType "image/jpeg" .gz
    AddEncoding gzip .gz
</Files>
<Files *.html.gz>
    AddType "text/html" .gz
    AddEncoding gzip .gz
</Files>

# Specify Brotli-encoded assets
<Files *.js.br>
    AddType "text/javascript" .br
    AddEncoding br .br
</Files>
<Files *.png.br>
    AddType "image/png" .br
    AddEncoding br .br
</Files>
<Files *.jpg.br>
    AddType "image/jpeg" .br
    AddEncoding br .br
</Files>

<Files *.css.br>
    AddType "text/css" .br
    AddEncoding br .br
</Files>
<Files *.svg.br>
    AddType "image/svg+xml" .br
    AddEncoding br .br
</Files>
<Files *.html.br>
    AddType "text/html" .br
    AddEncoding br .br
</Files>

<IfModule mod_headers.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE image/jpeg
AddOutputFilterByType DEFLATE image/png
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript

RewriteEngine On
# Serve pre-compressed Brotli assets
RewriteCond %{HTTP:Accept-Encoding} br
RewriteCond %{REQUEST_FILENAME}.br -f
RewriteRule ^(.*)$ $1.br [L]
# Serve pre-compressed gzip assets
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule ^(.*)$ $1.gz [L]
</IfModule>