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
Turns out that the site()
function was returning an error. In order to fix it, I needed to make sure bootstrap()
ran first so I ended up with this:
// Compile Our Sass
gulp.task('sass', function() {
var bootstrap = function() {
return gulp
.src('./public/bower/bootstrap-sass/lib/*.scss')
.pipe(sass())
.pipe(concat('bootstrap.css'))
.pipe(gulp.dest('./public/dist/css'));
};
var site = function() {
return gulp
.src('./public/src/scss/*.scss')
.pipe(sass())
.pipe(concat('site.css'))
.pipe(gulp.dest('./public/dist/css'));
};
return bootstrap().on('end', site);
});
Its also possible, to create another task to compile other tasks by passing an array of task names like this:
gulp.task('sass-file-one', function () {
console.log('compiled sass-file-one')
});
gulp.task('sass-file-two', function () {
console.log('compiled sass-file-two')
});
gulp.task('compile-all-sass', ['sass-file-one','sass-file-two']);
then you can simply run gulp compile-all-sass
In Gulp version 4, we have parallel
, so you can do:
// Compile Our Sass
gulp.task('bootstrap-sass', function() {
return gulp.src('./public/bower/bootstrap-sass/lib/*.scss')
.pipe(sass())
.pipe(concat('bootstrap.css'))
.pipe(gulp.dest('./public/dist/css'));
});
gulp.task('site-sass', function() {
return gulp.src('./public/app/scss/*.scss')
.pipe(sass())
.pipe(concat('site.css'))
.pipe(gulp.dest('./public/dist/css'));
});
gulp.task('sass', gulp.parallel('bootstrap-sass', 'site-sass')); // Combine
You can also write it as a single task by doing:
gulp.task('sass', gulp.parallel(
function() {
return gulp.src('./public/bower/bootstrap-sass/lib/*.scss')
.pipe(sass())
.pipe(concat('bootstrap.css'))
.pipe(gulp.dest('./public/dist/css'));
},
function() {
return gulp.src('./public/app/scss/*.scss')
.pipe(sass())
.pipe(concat('site.css'))
.pipe(gulp.dest('./public/dist/css'));
}));
I prefer the first method because it is easier to maintain
Have you tried using merge-stream?
merge = require('merge-stream');
// Compile Our Sass
gulp.task('sass', function() {
var bootstrap = gulp
.src('./public/bower/bootstrap-sass/lib/*.scss')
.pipe(sass())
.pipe(concat('bootstrap.css'))
.pipe(gulp.dest('./public/dist/css'));
var site = gulp
.src('./public/src/scss/*.scss')
.pipe(sass())
.pipe(concat('site.css'))
.pipe(gulp.dest('./public/dist/css'));
return merge(bootstrap, site);
});
See https://blog.mariusschulz.com/2015/05/02/merging-two-gulp-streams for more details
I just found a gulp plugin called gulp-all
and tried it. It's simple to use.
https://www.npmjs.com/package/gulp-all
The documentation of the package says:
var all = require('gulp-all') var styl_dir = 'path/to/styles/dir' var js_dir = 'path/to/scripts/dir' function build() { return all( gulp.src(styl_dir + '/**/*') // build Styles .pipe(gulp.dest('dist_dir')), gulp.src(js_dir + '/**/*') // build Scripts .pipe(gulp.dest('dist_dir')) ) } gulp.task('build', build);
also you can put subtasks in an array:
var scriptBundles = [/*...*/] function build(){ var subtasks = scriptBundles.map(function(bundle){ return gulp.src(bundle.src).pipe(/* concat to bundle.target */) }) return all(subtasks) }