Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

gulp-squoosh

chenaski305MIT0.11.0TypeScript support: included

Gulp plugin to compress images using Squoosh

gulpplugin, squoosh, image, compress, convert, minify, png, jpg, jpeg, mozjpeg, oxipng, webp, avif, wp2, jxl

readme

gulp-squoosh

Gulp plugin to compress images using Squoosh.

The library this plugin covers is going to be deprecated, so you would better consider using another alternative.

github `test` workflow status npm version license npm downloads nodejs support coverage

Installation

npm i -D gulp-squoosh

Usage

const gulp = require("gulp");
const gulpSquoosh = require("gulp-squoosh");

function processImages() {
  return gulp.src("src/images/**").pipe(gulpSquoosh()).pipe(gulp.dest("dist/images"));
}

Configuration

For available options, see libSqooush.

gulpSquoosh({
  preprocessOptions: {...},
  encodeOptions: {...},
});

gulpSquoosh(({ width, height, size }) => ({
  preprocessOptions: {...},
  encodeOptions: {...},
}));
const DEFAULT_ENCODE_OPTIONS = {
  mozjpeg: {},
  webp: {},
  avif: {},
  jxl: {},
  oxipng: {},
};

Example

You can see full source code of the example here.

With growing adoption of ES modules, more and more libraries drop CommonJS support. Despite the fact this library doesn't support ESM, you can continue to use it in your ESM projects, here is an example.

const gulp = require("gulp");
const gulpSquoosh = require("gulp-squoosh");
const gulpCache = require("gulp-cache");

const SOURCE = "src/images/**";
const DESTINATION = "build/images";

function processImages() {
  return gulp
    .src(SOURCE)
    .pipe(
      gulpCache(
        gulpSquoosh(({ width, height, size, filePath }) => ({
          preprocessOptions: {
            resize: {
              width: width * 0.5,
            },
          },
          encodeOptions: {
            jxl: {},
            avif: {},
            webp: {},
            // wp2: {}
            ...(path.extname(filePath) === ".png" ? { oxipng: {} } : { mozjpeg: {} }),
          },
        }))
      )
    )
    .pipe(gulp.dest(DESTINATION));
}

Then you can use converted images with <picture> tag:

<picture>
  <source srcset="image.jxl" type="image/jxl" />
  <source srcset="image.avif" type="image/avif" />
  <source srcset="image.webp" type="image/webp" />
  <img src="image.jpg" alt="fill out me" />
</picture>

Troubleshooting

WASM memory error

You cannot run multiple gulp-squoosh tasks in parallel (via gulp.parallel) because you will get a wasm memory error. But you can just replace it with gulp.serial, it will not affect the speed:

gulp.parallel(/* ... */ compressImages, /* ... */ compressOtherImages);

// become

gulp.parallel(/* ... */ gulp.series(compressImages, compressOtherImages) /* ... */);

changelog

0.11.0 (2022-10-23)

0.10.0 (2022-10-23)

  • Add example of ESM project (b1fa1a3)
  • Add note about deprecation of libSquoosh in README (65636e0)
  • Change dependabot schedule (7146b11)
  • Replace chalk with picocolors (b44c391)
  • Update CHANGELOG (15426a5)
  • Update dependabot config (fcc64ce)
  • Update test workflow (69f0c11)
  • Update error messages for check-dts (2e5a8a9)

0.9.0 (2021-10-15)

  • Replace colorette with chalk (d4abdd6)

0.8.0 (2021-08-19)

  • Add filePath for options factory (2bed67a)

0.7.0 (2021-07-29)

  • Downgrade @squoosh/lib version (2e75f11)

0.6.0 (2021-07-23)

  • Add Troubleshooting section in README (8b43c82)
  • Update README (d1916c5)

0.5.2 (2021-07-23)

  • Add Troubleshooting section in README (8b43c82)

0.5.1 (2021-07-17)

  • Remove preprocessOptions.resize.enabled field (15515f7)

0.5.0 (2021-07-16)

  • Fix paths (573a452)
  • Update gulp-squoosh version in example (ca5200e)
  • Use a single ImagePool for all images in a stream (0f5c479)

0.4.1 (2021-07-10)

0.4.0 (2021-07-10)

  • Add TODO section to README (12c79c2)
  • Add type definitions, use check-dts for validation (e92a9fc)
  • Fix typos (92adec1)
  • Update gulp-squoosh version in example (f37f8d7)

0.3.1 (2021-07-02)

0.3.0 (2021-07-02)

0.2.1 (2021-07-02)

  • Refactor test-runner scripts (81e8693)

0.2.0 (2021-06-28)

0.1.0 (2021-06-27)