Search code examples
javascriptconcatenationgulpevent-streamgulp-sass

Gulp.js event stream merge order


I am trying to merge css and scss files into a main.css file that goes in my build directory. Its working, but not in the right order. The style attributes from the scss files need to be in the bottom of the main.css file so they overrule the rest.

my Gulp task looks like this:

    //CSS
gulp.task('css', function () {
    var cssTomincss = gulp.src(['dev/css/reset.css', 'dev/css/style.css','dev/css/typography.css',    'dev/css/sizes.css']);

    var cssFromscss = gulp.src(['dev/css/*.scss'])
        .pipe(sass());

    return es.merge(cssTomincss, cssFromscss)
        .pipe(concat('main.css'))
        .pipe(minifyCSS())
        .pipe(gulp.dest('build/css'))
});

I am defining the sources first with variables. I am using the gulp-sass plugin to convert the scss file into normal css (.pipe(sass)) and later merging the two with the es.merge function and concatenating them into main.css.

The problem is that the style attributes van the .scss files end up somewhere in the top end of the main.css file. I need them to be at the bottom. So they need to be concatenated at the bottom.

Any clue on how to do this?


Solution

  • Try streamqueue.

    var streamqueue = require('streamqueue');
    
    gulp.task('css', function () {
        return streamqueue({ objectMode: true },
                gulp.src(['dev/css/reset.css', 'dev/css/style.css', 'dev/css/typography.css', 'dev/css/sizes.css']),
                gulp.src(['dev/css/*.scss']).pipe(sass())
            )
            .pipe(concat('main.css'))
            .pipe(minifyCSS())
            .pipe(gulp.dest('build/css'))
    });
    

    This cheatsheet will help you. PDF is here.