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;});