hybrid-gulp

Easily create a hybrid API that works with and without Gulp.

Usage no npm install needed!

<script type="module">
  import hybridGulp from 'https://cdn.skypack.dev/hybrid-gulp';
</script>

README

Hybrid Gulp

A node module that creates hybrid plugins that can function standalone or within a Gulp stream.

Installation

npm install hybrid-gulp --save

How it Works

Hybrid Gulp creates plugins that follow this format:

To be used standalone, the plugin is called with src and dest options:

// Plugin generated with hybrid-gulp
var plugin = require('plugin');

plugin({
  src: 'input/**/*',
  dest: 'output'
}).then(function() {
  // Callback that runs when all files have been processed
}).catch(function() {
  // Callback that runs if there's an error
});

To be used inside Gulp, the plugin is called without src or dest options:

var plugin = require('plugin');

gulp.src('input/**/*')
  .pipe(plugin())
  .pipe(dest('output'));

Internally, your plugin defines a transform function which works the exact same in both situations. The transform gets an input file, and returns a modified output file.

Usage

Hybrid Gulp creates a plugin that accepts one parameter of configuration settings. Two of these settings will be the source and destination settings, named src and dest by default.

The transform function is a through2 object stream.

var hybrid = require('hybrid-gulp');
var MyLibrary = require('./lib/mylibrary');

module.exports = hybrid({
  transform: function(file, enc, cb, opts) {
    file.contents = new Buffer(MyLibrary.doSomething(file));
    cb(null, file);
  },
  onFinish: function(opts, cb) {
    MyLibrary.cleanupStuff(opts);
    cb();
  }
})

srcOption

  • Type: String
  • Default: 'src'

Configuration setting your plugin uses to take in source files.

destOption

  • Type: String
  • Default: 'dest'

Configuration setting your plugin uses to set an output folder.

transform

  • Type: Function

Function to manipulate input files. It's a through2 object stream that takes these parameters:

  • file (Object): Vinyl object that corresponds to the current file being transformed. You can get the contents with file.contents.toString().
  • enc (String): Encoding of the file.
  • cb (Function): Function to run when processing is done. Call it like cb(err, file), where err is an error (or null if there was no error), and file is a modified Vinyl file.
  • opts (Object): Options passed to your plugin function.

onFinish

  • Type: Function
  • Default: null

Function to run when the plugin finishes processing all files. It takes these parameters:

  • opts (Object): Options passed to your plugin function.
  • cb (Function): Function to run when the function is done. Doesn't require any parameters.

callback

  • Type: Boolean
  • Default: false

If true, your plugin will use callbacks instead of promises, adding an extra parameter to the plugin for the callback.

var options = {};

plugin(options, function(err) {
  if (err) throw err;
});