How to save a stream into multiple destinations with Gulp.js? How to save a stream into multiple destinations with Gulp.js? javascript javascript

How to save a stream into multiple destinations with Gulp.js?


Currently you have to use two streams for each dest when using file.contents as a stream. This will probably be fixed in the future.

var gulp       = require('gulp');var rename     = require('gulp-rename');var streamify  = require('gulp-streamify');var uglify     = require('gulp-uglify');var source     = require('vinyl-source-stream');var browserify = require('browserify');var es         = require('event-stream');gulp.task('scripts', function () {    var normal = browserify('./src/index.js').bundle()        .pipe(source('bundle.js'))        .pipe(gulp.dest('./dist'));    var min = browserify('./src/index.js').bundle()        .pipe(rename('bundle.min.js'))        .pipe(streamify(uglify())        .pipe(gulp.dest('./dist'));    return es.concat(normal, min);});

EDIT: This bug is now fixed in gulp. The code in your original post should work fine.


I was facing similar issue and wanted the gulp source to be copied to multiple locations after lint, uglify and minify tasks. I ended up resolving this as below,

gulp.task('script', function() {  return gulp.src(jsFilesSrc)    // lint command    // uglify and minify commands    .pipe(concat('all.min.js'))    .pipe(gulp.dest('build/js')) // <- Destination to one location    .pipe(gulp.dest('../../target/build/js')) // <- Destination to another location});


For the case of broadcasting updates to multiple destinations, looping the gulp.dest command over an array of destinations works well.

var gulp = require('gulp');var source = './**/*';var destinations = [    '../foo/dest1',    '../bar/dest2'];gulp.task('watch', function() {    gulp.watch(source, ['sync']);});gulp.task('sync', function (cb) {    var pipeLine = gulp.src(source);    destinations.forEach(function (d) {        pipeLine = pipeLine.pipe(gulp.dest(d));    });    return pipeLine;});