gusher

The streaming build system.

Usage no npm install needed!

<script type="module">
  import gusher from 'https://cdn.skypack.dev/gusher';
</script>

README

A smaller, better streaming build system.

What is Gusher?

  • Gusher is a smaller streaming build system based off Gulp made to improve performance in building Gulpfiles.

Installation

Installation of Gusher is very simple with NPM or Yarn.

npm i -g gusher
yarn global add gusher

Windows Only! Make sure that your system environment variables include a path to your NPM bin folder!

Documentation

Here is a sample of something made with Gusher.

  • It still uses Gulp modules!
/* Taken from https://github.com/gulpjs/gulp#documentation */
var gusher = require('gusher');
var less = require('gulp-less');
var babel = require('gulp-babel');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var rename = require('gulp-rename');
var cleanCSS = require('gulp-clean-css');
var del = require('del');

var paths = {
  styles: {
    src: 'src/styles/**/*.less',
    dest: 'assets/styles/'
  },
  scripts: {
    src: 'src/scripts/**/*.js',
    dest: 'assets/scripts/'
  }
};

/* Not all tasks need to use streams, a gusherfile is just another node program
 * and you can use all packages available on npm, but it must return either a
 * Promise, a Stream or take a callback and call it
 */
function clean() {
  // You can use multiple globbing patterns as you would with `gusher.src`,
  // for example if you are using del 2.0 or above, return its promise
  return del([ 'assets' ]);
}

/*
 * Define our tasks using plain functions
 */
function styles() {
  return gusher.src(paths.styles.src)
    .pipe(less())
    .pipe(cleanCSS())
    // pass in options to the stream
    .pipe(rename({
      basename: 'main',
      suffix: '.min'
    }))
    .pipe(gusher.dest(paths.styles.dest));
}

function scripts() {
  return gusher.src(paths.scripts.src, { sourcemaps: true })
    .pipe(babel())
    .pipe(uglify())
    .pipe(concat('main.min.js'))
    .pipe(gusher.dest(paths.scripts.dest));
}

function watch() {
  gusher.watch(paths.scripts.src, scripts);
  gusher.watch(paths.styles.src, styles);
}

/*
 * Specify if tasks run in series or parallel using `gusher.series` and `gusher.parallel`
 */
var build = gusher.series(clean, gusher.parallel(styles, scripts));

/*
 * You can use CommonJS `exports` module notation to declare tasks
 */
exports.clean = clean;
exports.styles = styles;
exports.scripts = scripts;
exports.watch = watch;
exports.build = build;
/*
 * Define default task that can be called by just running `gusher` from cli
 */
exports.default = build;

Anything listed in the README of Gulp is fully functional in Gusher as of 2019-08-21.

Happy programming with Gusher!