I currently have two tasks, that both compile sass files. I would still like to concat the two directories into separate files but it seems that it would be more maintainabl
I think the proper way of doing this is using task dependency.
In gulp you can define tasks that needs to be run before a given task.
For instance:
gulp.task('scripts', ['clean'], function () {
// gulp.src( ...
});
When doing gulp scripts
in the Terminal, clean is run before the scripts task.
In your example I'd have the two seperate SASS tasks as a dependency of a common SASS task. Something like:
// Compile Our Sass
gulp.task('bootstrap-sass', function() {
return gulp.src('./public/bower/bootstrap-sass/lib/*.scss')
.pipe(sass())
.pipe(contact('bootstrap.css'))
.pipe(gulp.dest('./public/dist/css'));
});
gulp.task('site-sass', function() {
return gulp.src('./public/app/scss/*.scss')
.pipe(sass())
.pipe(contact('site.css'))
.pipe(gulp.dest('./public/dist/css'));
});
gulp.task('sass', ['bootstrap-sass', 'site-sass']);
You read more about the task dependecy on the Gulp recipes section: https://github.com/gulpjs/gulp/blob/master/docs/recipes/running-tasks-in-series.md
With Gulp4 you can use:
gulp.series
for sequential execution gulp.parallel
for parallel execution
gulp.task('default', gulp.series('MyTask001', 'MyTask002'));
gulp.task('default', gulp.parallel('MyTask001', 'MyTask002'));
Article about here
You dont need run-sequence plugin anymore
You need install:
npm install -D gulp@next
THE SOLUTION: call the functions!!!
return Promise.all([bootstrap(), site()])
Be aware of the parens bootstrap(), site() so they return a promise :)
I'm not sure if I understand question correctly, but if I do, this should be a simple solution:
gulp.task('sass', ['bootstrap-sass', 'site-sass']);
It works.
var task1 = gulp.src(...)...
var task2 = gulp.src(...)...
return [task1, task2];
Solution 1:
gulp.task('sass', function() {
gulp.start('bootstrap-sass', 'site-sass');
})
gulp.start runs tasks in parallel. And it's asynchronous, which means 'bootstrap-sass' may be finished before 'site-sass'. But it's not recommended because
gulp.start is undocumented on purpose because it can lead to complicated build files and we don't want people using it
see https://github.com/gulpjs/gulp/issues/426
Solution 2:
var runSequence = require('run-sequence');
gulp.task('sass', function (cb) {
runSequence(['bootstrap-sass', 'site-sass'], cb);
});
run-sequence is a gulp plugin.
Runs a sequence of gulp tasks in the specified order. This function is designed to solve the situation where you have defined run-order, but choose not to or cannot use dependencies.
runSequence(['bootstrap-sass', 'site-sass'], cb);
This line runs 'boostrap-sass' and 'site-sass' in parallel.If you want to run tasks serially, you can
runSequence('bootstrap-sass', 'site-sass', cb);