lazypipe
Lazypipe allows you to create an immutable, lazily-initialized pipeline. It's designed to be used in an environment where you want to reuse partial pipelines, such as with gulp.
This module returns a function that can be used to start building a lazypipe. Individual steps are added via the .pipe()
method. At any point, a new lazypipe can be built by adding to an existing one, without affecting the previous lazypipe. Lazypipes can even be used as steps within another lazypipe.
Once the partial pipeline is ready to use, call the last result from .pipe()
directly as a function (e.g.: .pipe()()
).
Changelog
Usage
Install using:
npm i --save-dev lazypipe
Then create lazypipes like so:
var lazypipe = require('lazypipe');
...
var jsHintTasks = lazypipe()
.pipe(jshint)
.pipe(jshint.reporter, 'jshint-stylish');
var jsTasks = jsHintTasks
.pipe(gulp.dest, 'build/js');
var cssTasks = lazypipe()
.pipe(recess, recessConfig)
.pipe(less)
.pipe(autoprefixer);
gulp.task('jsHint', function() {
gulp.src('js/**/*.js').pipe(jsHintTasks());
});
gulp.task('build', function() {
return gulp.src('js/**/*.js').pipe(jsTasks());
});
gulp.task('default', ['build'], function() {
watch('js/**/*.js').pipe(jsTasks());
});
You can combine lazypipes in various ways:
var foo = lazypipe().pipe(streamA).pipe(streamB);
var bar = foo.pipe(streamC);
var baz = lazypipe().pipe(streamD).pipe(foo).pipe(streamE);
Using with more complex function arguments (such as gulp-if)
Lazypipe assumes that all function parameters are static, gulp-if arguments need to be instantiated inside each lazypipe. This difference can be easily solved by passing a function on the lazypipe step
var gulpif = require('gulp-if');
var jshint = require('gulp-jshint');
var uglify = require('gulp-uglify');
var concat = require('gulp-concat');
var compressing = false;
var jsChannel = lazypipe()
.pipe(jshint)
.pipe(jshint.reporter)
.pipe(jshint.reporter, 'fail')
.pipe(concat, 'bundle.js', {newLine: ';'})
.pipe(function () {
return gulpif(compressing, uglify());
});
gulp.task('scripts', function () {
return gulp.src(paths.scripts.src)
.pipe(jsChannel())
.pipe(gulp.dest(paths.scripts.dest));
});
source
API
lazypipe()
Initializes a lazypipe. Returns a function that can be used to create the pipeline. The returned function has a function (pipe
) which can be used to create new lazypipes with an additional step.
lazypipe().pipe(fn[, arg1[, arg2[, ...]]])
Creates a new lazy pipeline with all the previous steps, and the new step added to the end. Returns the new lazypipe.
fn
- a stream creation function to call when the pipeline is created later. You can either provide existing functions (such as gulp plugins), or provide your own custom functions if you want to manipulate the stream before creation.arg1, arg2, ...
- Any remaining arguments are saved and passed into fn
when the pipeline is created.
The arguments allows you to pass in configuration arguments when the pipeline is created, like this:
var pipeline = lazypipe().pipe(jsHint, jsHintOptions);
gulp.src().pipe(jsHint(jsHintOptions));
lazypipe()()
"build"
Calling the result of pipe()
as a function builds the pipeline at that time. This can be used multiple times, and can even be called if the lazypipe was used to create different pipelines.
It returns a stream created using stream-combiner
, where all the internal steps are processed sequentially, and the final result is passed on.
Help Support This Project
If you'd like to support this and other OverZealous Creations (Phil DeJarnett) projects, donate via Gratipay!
LICENSE
MIT License