npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

gzipper

v8.2.0

Published

CLI for compressing files.

Downloads

141,422

Readme

Gzipper

Support Ukraine Badge Build Status npm version

A tool for compressing files by means of Deflate, Brotli, gzip, Zopfli and zstd algorithms, works seamlessly with many CLI UI tools (Angular CLI, Vue CLI, create-react-app).

The flexibility of the algorithms could be extended by many options, including the --gzip-level, --gzip-strategy, --gzip-memory-level, --brotli-param-mode, --brotli-quality, --brotli-size-hint. All options can be declared via ENV variables (ENV variables have higher priority over CLI arguments).

You can enable --verbose mode for better visual representation, customize your file output using --output-file-format or compress with --incremental option if you have a lot of files that rarely change.

By default gzipper compress all the files but you could use --include or --exclude options for flexibility.

Install

  • Globally

    npm i gzipper -g

  • Locally to devDependencies.

    npm i gzipper -D

Usage

gzipper

Usage: gzipper [options] [command]

Options:
  -V, --version                             output the version number
  -h, --help                                display help for command

Commands:
  compress|c [options] <path> [outputPath]  compress selected path and optionally set output directory
  cache                                     manipulations with cache
  help [command]                            display help for command

compress|c

Usage: gzipper compress|c [options] <path> [outputPath]

compress selected path and optionally set output directory

Options:
  -v, --verbose                          detailed level of logs
  --incremental                          incremental compression
  -e, --exclude <extensions>             exclude file extensions from compression, example: jpeg,jpg...
  -i, --include <extensions>             include file extensions for compression, example: js,css,html...
  -t, --threshold <number>               exclude assets smaller than this byte size. 0 (default)
  --deflate                              enable deflate compression
  --brotli                               enable brotli compression
  --gzip                                 enable gzip compression
  --zopfli                               enable zopfli compression
  --zstd                                 enable zstd compression
  --gzip-level <number>                  gzip compression level 6 (default), 0 (no compression) - 9 (best compression)
  --gzip-memory-level <number>           amount of memory which will be allocated for gzip compression 8 (default), 1 (minimum memory) - 9 (maximum memory)
  --gzip-strategy <number>               gzip compression strategy 0 (default), 1 (filtered), 2 (huffman only), 3 (RLE), 4 (fixed)
  --deflate-level <number>               deflate compression level 6 (default), 0 (no compression) - 9 (best compression)
  --deflate-memory-level <number>        amount of memory which will be allocated for deflate compression 8 (default), 1 (minimum memory) - 9 (maximum memory)
  --deflate-strategy <number>            deflate compression strategy 0 (default), 1 (filtered), 2 (huffman only), 3 (RLE), 4 (fixed)
  --brotli-param-mode <value>            default, text (for UTF-8 text), font (for WOFF 2.0 fonts)
  --brotli-quality <number>              brotli compression quality 11 (default), 0 - 11
  --brotli-size-hint <number>            expected input size 0 (default)
  --zopfli-num-iterations <number>       maximum amount of times to rerun forward and backward pass to optimize LZ77 compression cost
  --zopfli-block-splitting               splits the data in multiple deflate blocks with optimal choice for the block boundaries
  --zopfli-block-splitting-max <number>  maximum amount of blocks to split into (0 for unlimited, but this can give extreme results that hurt compression on some files)
  --zstd-level <number>                  zstd compression level 1 (default), 5 (best compression)
  --output-file-format <value>           output file format with default artifacts [filename].[ext].[compressExt]
  --remove-larger                        remove compressed files if they larger than uncompressed originals
  --skip-compressed                      skip compressed files if they already exist
  --workers <number>                     numbers of workers which will be spawned, system CPU cores count (default)
  --no-color                             disable logger colorful messages
  -h, --help                             display help for command

cache

Usage: gzipper cache [options] [command]

manipulations with cache

Options:
  -h, --help      display help for command

Commands:
  purge           purge cache storage
  size            size of cached resources
  help [command]  display help for command

Examples

CLI

  • Globally usage

    gzipper compress [options] <path> [outputPath]

  • Locally usage

    1. Add module to scripts in your package.json and run compress command npm run compress

        "scripts": {
          "gzipper": "gzipper",
          "compress": "gzipper compress ./src"
        }
    2. Use npx command

        "scripts": {
          "compress": "npx gzipper compress ./src"
        }
  • UI build tools (e.g. Angular CLI)

      "scripts": {
        "build": "ng build && gzipper compress ./src"
      }
  • Compress files to a certain directory ./dist (folders structure inside src will be saved)

      "scripts": {
        "compress": "gzipper compress ./src ./dist"
      }
  • Compress files to very deep folder ./very/deep/folder/dist (all folders will be automatically created if not exist)

      "scripts": {
        "compress": "gzipper compress ./src ./very/deep/folder/dist"
      }
  • Compress a single file

      "scripts": {
        "compress": "gzipper compress ./src/awesomeness.txt"
      }

Node.js Module

import { Compress } from "gzipper";
const gzip = new Compress('./src', './dist', {
  verbose: true,
  brotli: true,
});

try {
  const files = await gzip.run();
  console.info('Compressed files: ', files);
} catch (err) {
  console.error(err);
}

Options

compress|c

| CLI argument | ENV variable | | ------------------------------------------------------------------------------- | --------------------------------------------- | | --incremental | GZIPPER_INCREMENTAL (0 or 1) | | -v, --verbose | GZIPPER_VERBOSE (0 or 1) | | -e, --exclude <extensions> | GZIPPER_EXCLUDE | | -i, --include <extensions> | GZIPPER_INCLUDE | | -t, --threshold <number> | GZIPPER_THRESHOLD | | --gzip | GZIPPER_GZIP (0 or 1) | | --deflate | GZIPPER_DEFLATE (0 or 1) | | --brotli | GZIPPER_BROTLI (0 or 1) | | --zopfli | GZIPPER_ZOPFLI (0 or 1) | | --zstd | GZIPPER_ZSTD (0 or 1) | | --gzip-level <number> | GZIPPER_GZIP_LEVEL | | --gzip-memory-level <number> | GZIPPER_GZIP_MEMORY_LEVEL | | --gzip-strategy <number> | GZIPPER_GZIP_STRATEGY | | --deflate-level <number> | GZIPPER_DEFLATE_LEVEL | | --deflate-memory-level <number> | GZIPPER_DEFLATE_MEMORY_LEVEL | | --deflate-strategy <number> | GZIPPER_DEFLATE_STRATEGY | | --brotli-param-mode <value> | GZIPPER_BROTLI_PARAM_MODE | | --brotli-quality <number> | GZIPPER_BROTLI_QUALITY | | --brotli-size-hint <number> | GZIPPER_BROTLI_SIZE_HINT | | --zopfli-num-iterations <number> | GZIPPER_ZOPFLI_NUM_ITERATIONS | | --zopfli-block-splitting | GZIPPER_ZOPFLI_BLOCK_SPLITTING (0 or 1) | | --zopfli-block-splitting-max <number> | GZIPPER_ZOPFLI_BLOCK_SPLITTING_MAX | | --zstd-level <number> | GZIPPER_ZSTD_LEVEL | | --output-file-format <value> | GZIPPER_OUTPUT_FILE_FORMAT | | --remove-larger | GZIPPER_REMOVE_LARGER (0 or 1) | | --skip-compressed | GZIPPER_SKIP_COMPRESSED (0 or 1) | | --workers <number> | GZIPPER_WORKERS | | --no-color | GZIPPER_NO_COLOR or NO_COLOR (0 or 1) |

ENV variables have higher priority over CLI arguments.

--incremental

gzipper c ./src --incremental

A special type of compression that significantly decreases the time of compression (on the second run) if you have a lot of big and rarely updated files. It creates a .gzipper folder with pre-compressed files (cache) and config that stores all necessary metadata (.gzipperconfig).

-v, --verbose

gzipper c ./src --verbose

Get more information about executed work. (Could increase time of compression because of gathering additional metrics)

-e, --exclude <extensions>

gzipper c ./src --exclude jpeg,jpg,png,ico

Exclude file extensions from compression. Compression extensions br, gz, zz and zst are excluded by default.

-i, --include <extensions>

gzipper c ./src --include js,css,html

Include file extensions for compression (exclude others).

-t, --threshold <number>

gzipper c ./src --threshold 900

Exclude assets smaller than this byte size. Default is 0 byte.

--gzip

gzipper c ./src --gzip

Enable gzip compression. (default behavior)

--deflate

gzipper c ./src --deflate

Enable Deflate compression.

--brotli

gzipper c ./src --brotli

Enable Brotli compression.

--zopfli

gzipper c ./src --zopfli

Enable Zopfli compression.

--zstd

gzipper c ./src --zstd

Enable Zstandard compression.

--gzip-level <number>

gzipper c ./src --gzip-level 8

gzip compression level: 6 (default), 0 (no compression) - 9 (best compression). Only for --gzip.

--gzip-memory-level <number>

gzipper c ./src --gzip-memory-level 2

Amount of memory that will be allocated for gzip compression: 8 (default), 1 (minimum memory) - 9 (maximum memory). Only for --gzip.

--gzip-strategy <number>

gzipper c ./src --gzip-strategy 3

gzip compression strategy: 0 (default), 1 (filtered), 2 (huffman only), 3 (RLE), 4 (fixed). Only for --gzip.

--deflate-level <number>

gzipper c ./src --deflate-level 8

Deflate compression level: 6 (default), 0 (no compression) - 9 (best compression). Only for --deflate.

--deflate-memory-level <number>

gzipper c ./src --deflate-memory-level 2

Amount of memory that will be allocated for deflate compression: 8 (default), 1 (minimum memory) - 9 (maximum memory). Only for --deflate.

--deflate-strategy <number>

gzipper c ./src --deflate-strategy 3

Deflate compression strategy: 0 (default), 1 (filtered), 2 (huffman only), 3 (RLE), 4 (fixed). Only for --deflate.

--brotli-param-mode <value>

gzipper c ./src --brotli-param-mode text

Available values are: text (for UTF-8 text, default) and font (for WOFF 2.0 fonts). Only for --brotli.

--brotli-quality <number>

gzipper c ./src --brotli-quality 10

Brotli compression quality: 11 (default), 0 - 11. Only for --brotli.

--brotli-size-hint <number>

gzipper c ./src --brotli-size-hint 6

Estimated total input size for all files to compress: 0 (default, which means that the size is unknown). Only for --brotli.

--zopfli-num-iterations <number>

gzipper c ./src --zopfli-num-iterations 15

Maximum amount of times to rerun forward and backward pass to optimize LZ77 compression cost. Good values: 10, 15 for small files, 5 for files over several MB in size or it will be too slow. Only for --zopfli.

--zopfli-block-splitting

gzipper c ./src --zopfli-block-splitting

If true, splits the data in multiple deflate blocks with optimal choice for the block boundaries. Block splitting gives better compression. Only for --zopfli.

--zopfli-block-splitting-max <number>

gzipper c ./src --zopfli-block-splitting-max 5

Maximum amount of blocks to split into. 0 for unlimited, but this can give extreme results that hurt compression on some files. Only for --zopfli.

--zstd-level <number>

gzipper c ./src --zstd-level 8

Zstd compression level: 1 (default), 5 (best compression). Only for --zstd.

--output-file-format <value>

Output file format with artifacts, default format: [filename].[ext].[compressExt]. Where: filename -> name of your file, ext -> file extension, compressExt -> compress extension (.gz, .br, etc), hash -> uniq hash.

Example: Expected project structure.

img
  rabbit.jpg
  cat.jpg
js
  main.js
  modules.js
xml
  main.xml
index.js
  • gzipper c ./src --output-file-format [filename].[compressExt].[ext]

    img
      rabbit.jpg
      rabbit.gz.jpg
      cat.jpg
      cat.gz.jpg
    js
      main.js
      main.gz.js
      modules.js
      modules.gz.js
    xml
      main.xml
      main.gz.xml
    index.js
    index.gz.js
  • gzipper c ./src --output-file-format test-[filename]-[hash].[compressExt].[ext]

    img
      rabbit.jpg
      cat.jpg
      test-rabbit-b4564011-ba7c-4bd6-834d-bf6c7791b7d4.gz.jpg
      test-cat-739c7d7d-53ca-4f8e-912c-bad3b2b515a9.gz.jpg
    js
      main.js
      modules.js
      test-main-4cc35dbd-36f7-4889-9f41-4d93e7a25bef.gz.js
      test-modules-bce90cbd-5bf2-43c2-8b61-33aa1599b704.gz.js
    xml
      main.xml
      test-main-a90fa10e-f7a4-4af9-af67-f887bb96f98b.gz.xml
    index.js
    test-index-067c1e2d-0e12-4b57-980b-97c880c24d57.gz.js
  • gzipper c ./src --output-file-format [filename]-[hash]-[filename]-tmp.[ext].[compressExt]

    img
      rabbit.jpg
      rabbit-b4564011-ba7c-4bd6-834d-bf6c7791b7d4-rabbit-tmp.jpg.gz
      cat.jpg
      cat-739c7d7d-53ca-4f8e-912c-bad3b2b515a9cat-tmp.jpg.gz
    js
      main.js
      main-4cc35dbd-36f7-4889-9f41-4d93e7a25bef-main-tmp.js.gz
      modules.js
      modules-bce90cbd-5bf2-43c2-8b61-33aa1599b704-modules-tmp.js.gz
    xml
      main.xml
      main-a90fa10e-f7a4-4af9-af67-f887bb96f98b-main-tmp.xml.gz
    index.js
    index-067c1e2d-0e12-4b57-980b-97c880c24d57-index-tmp.js.gz

--remove-larger

Removes compressed files larger than uncompressed originals in your directory.

--skip-compressed

Ignores compressed files that have already exist in your directory. Only with default --output-file-format.

--workers <number>

Spawn workers for parallel compression. Be aware of workers number because every worker creates an additional thread. More info at nodesource.com.

--no-color

Disable logger colorful messages.

cache

| Command | | ----------------- | | purge | | size |

purge

gzipper cache purge

Removes all pre-compressed files from cache that was generated via --incremental argument.

size

gzipper cache size

Returns the size of all pre-compiled files from cache.

Changelog

CHANGELOG.md

Contribution

I appreciate every contribution, just fork the repository and send the pull request with your changes.

Support

  • Node.js >= 20.11.0

Prerequisites

If you want to use --zstd compression, you have to make sure that the appropriate library is installed and available at your environment:

where zstd.exe   # Windows
command -v zstd  # MacOS/Linux

If you didn't find executable zstd you have to install this manually:

  • MacOS using Brew

    brew install zstd   # zstd only
    brew install zlib   # whole library
  • Windows Subsystem for Linux (WSL), Ubuntu, Debian... using APT

    sudo apt install zstd