Reputation: 24768
I have this task. First I do one thing with one src. Then I do another thing with another src. How do I "merge" them to be just one pipeline?
gulp.task('css', function() {
gulp.src('site/patterns/site/site.scss')
.pipe(sass().on('error', sass.logError))
.pipe(autoprefixer())
.pipe(rename('index.css'))
.pipe(gulp.dest('assets/css'))
.pipe(minifyCss())
.pipe(rev())
.pipe(gulp.dest('assets/css'))
.pipe(rev.manifest())
.pipe(revDel({ dest: 'assets/css' }))
.pipe(gulp.dest('assets/css'))
.pipe(notify("CSS generated!"))
;
gulp.src( ['assets/css/index-*.css'], {read: false})
.pipe( revOutdated() ) // leave 2 recent assets (default value)
.pipe( cleaner() );
});
Upvotes: 1
Views: 1895
Reputation: 5976
It's true that separate tasks should not be merged or turned into a single pipeline, but elevating every little micro subtask into a separate task just to make sure it executes in the right order can quickly bloat your gulpfile.js
. For complicated build environments, it's easy to end up with so many tasks and dependencies that no one can figure out what's happening.
To execute a subtask serially at the end of a task, use gulp-ignore to clear out the src
vinyl stream followed by gulp-add-src to effectively create a new stream.
package.json
"devDependencies": {
"gulp-add-src": "~0.2",
"gulp-ignore": "~2.0",
gulpfile.js
const addsrc = require('gulp-add-src');
const ignore = require('gulp-ignore');
...
gulp.task('generate-css', () =>
gulp.src('site/patterns/site/site.scss')
.pipe(sass().on('error', sass.logError))
...
.pipe(ignore.exclude(true)) //clear out src vinyl stream
.pipe(addsrc.prepend('assets/css/index-*.css')) //new stream
.pipe(revOutdated())
.pipe(cleaner())
);
This approach makes the task more cohesive, but when in doubt go with separate tasks.
Upvotes: 1
Reputation: 30564
You don't merge them and you don't turn them into a single pipeline. What you have here is two dependent tasks. You should treat them as such.
You want your second pipeline to run only after the first has finished, so that all your .css
files have been generated into assests/css
. So you put each pipeline into a separate task and make the second depend on the first:
gulp.task('generate-css', function() {
return gulp.src('site/patterns/site/site.scss')
.pipe(sass().on('error', sass.logError))
.pipe(autoprefixer())
.pipe(rename('index.css'))
.pipe(gulp.dest('assets/css'))
.pipe(minifyCss())
.pipe(rev())
.pipe(gulp.dest('assets/css'))
.pipe(rev.manifest())
.pipe(revDel({ dest: 'assets/css' }))
.pipe(gulp.dest('assets/css'))
.pipe(notify("CSS generated!"));
});
gulp.task('css', ['generate-css'], function() {
return gulp.src( ['assets/css/index-*.css'], {read: false})
.pipe( revOutdated() ) // leave 2 recent assets (default value)
.pipe( cleaner() );
});
Upvotes: 5