Create a through stream that wraps/nests a number of pipe statements.
Install with npm.
npm install --save-dev through-pipes
The primary use case is where you wish to define a subroutine that is to be used in a pipe statement. However in this subroutine you would also like to pipe through a set of streams.
The following example encapsulates a pre-minify
and ugilfy
as a minify
subroutine for Gulp.
var through = require('through-pipes');
var ngmin = require('gulp-ngmin');
var uglify = require('gulp-uglify');
function minify() {
return through(function(readable) {
return readable
.pipe(ngmin())
.pipe(uglify())
}
}
var gulp = require('gulp');
gulp.task('default', function() {
gulp.src('js/**/*.js')
.pipe(minify())
.pipe(gulp.dest('dist'))
});
Note that minification is an arbitrary and somewhat inappropriate example. You would normally be implementing something more specific that would be contained in a separate node package.
Other than the top-level factory method, there are a number of other methods that may be used to push input explicitly to the subroutine.
The following example pushes 3 files, and a stream end
event, directly to the readable stream.
var through = require('through-pipes');
var ngmin = require('gulp-ngmin');
var uglify = require('gulp-uglify');
through(function(readable) {
return readable
.pipe(ngmin())
.pipe(uglify())
})
.output(function(file) {
/* do something with each minified file */
})
.done(function() {
/* do something at the end */
})
.input(fileA, fileB, fileC)
.end();
Suitable for object streams only.
Creates a new instance.
@param {function(stream.Readable):stream.Readable} method
A factory method that returns a stream
@returns {stream.Through}
A through stream that wraps the pipe
Bypass the through stream and directly push values to the internal input stream.
@param {...object}
Any number of objects to add to the input.
@returns {stream.Through}
The through stream on which the method was called.
Bypass the through stream and directly push null
to the internal input stream to trigger end.
@returns {stream.Through}
The through stream on which the method was called.
A convenience for .on('data', method)
.
@param {function(string, function)} method
The method to be called on the data
event.
@returns {stream.Through}
The through stream on which the method was called.
A convenience for .on('end', method)
.
@param {function(string, function)} method
The method to be called on the end
event.
@returns {stream.Through}
The through stream on which the method was called.