A tiny wrapper around Node streams. To make gulp plugin write easier. Inspired by through2, (https://github.com/rvagg/through2/), but much simplify for gulp-plugin development for some reason.
npm install through-gulp --saveOne main API provided to use.
var through = require('through-gulp');
var stream = through(transformFunction, flushFunction);Both argument has default value to pipe data next without processing. if just for files map or files filter, two shortcut method provided as well.
// './test/fixtures/template.js'
define({});
// './test/fixtures/destiny.js'
define(function(){});it('something should work right', function(done) {
gulp.src(['./test/fixtures/template.js','./test/fixtures/destiny.js'])
.pipe(through.map(function(file) {
file.contents = Buffer.concat([new Buffer('love '), file.contents]);
return file;
}))
.pipe(assert.first(function(file) {
(file.contents.toString()).should.equal('love define({});');
}))
.pipe(assert.end(done));
})it('something should work right', function(done) {
gulp.src(['./test/fixtures/template.js','./test/fixtures/destiny.js'])
.pipe(through.filter(function(file) {
return file.contents.toString().indexOf('function') !== -1;
}))
.pipe(assert.first(function(file) {
(file.contents.toString()).should.equal('define(function(){});');
}))
.pipe(assert.end(done));
})A simple demonstrate about write gulp-plugin with through-gulp. If you know nothing about gulp plugin, check this first. (https://github.com/gulpjs/gulp/blob/master/docs/writing-a-plugin/guidelines.md)
// PLUGIN_NAME: sample
var through = require('through-gulp');
function sample() {
// creating a stream through which each file will pass
var stream = through(function(file, encoding,callback) {
// do whatever necessary to process the file
if (file.isNull()) {
}
if (file.isBuffer()) {
}
if (file.isStream()) {
}
// just pipe data next, or just do nothing to process file later in flushFunction
// never forget callback to indicate that the file has been processed.
this.push(file);
callback();
},function(callback) {
// just pipe data next, just callback to indicate that the stream's over
this.push(something);
callback();
});
// returning the file stream
return stream;
};
// exporting the plugin
module.exports = sample;then use the plugin with gulp
var gulp = require('gulp');
var sample = require('sample');
gulp.task('sample', function() {
return gulp.src(['source file'])
.pipe(sample())
.pipe(gulp.dest('file destiny'))
});Email: hjj491229492@hotmail.com.