Sometimes when working on “frontend tasks” with gulp, we need to merge different formats such as less, scss, css into a single minified css file.
Modules
Of course you have to install and require the good modules:
{
"name": "project",
"version": "0.1.0",
"main": "gulpfile.js",
"dependencies": {},
"devDependencies": {
"gulp": "^3.9.0",
"gulp-concat": "^2.6.0",
"gulp-less": "^3.0.3",
"gulp-minify-css": "^1.2.1",
"gulp-sass": "^2.0.4",
"merge-stream": "^1.0.0"
}
}
var gulp = require('gulp');
var sass = require('gulp-sass');
var less = require('gulp-less');
var concat = require('gulp-concat');
var minify = require('gulp-minify-css');
var merge = require('merge-stream');
Task
To do this we need to have multiple steps inside the gulp task.
- LESS:
var lessStream = gulp.src([...])
.pipe(less())
.pipe(concat('less-files.less'))
;
- SCSS/SASS:
var scssStream = gulp.src([...])
.pipe(sass())
.pipe(concat('scss-files.scss'))
;
- CSS:
var cssStream = gulp.src([...])
.pipe(concat('css-files.css'))
;
- The final gulp task:
gulp.task('build/admin', function() {
var lessStream = gulp.src([...])
.pipe(less())
.pipe(concat('less-files.less'))
;
var scssStream = gulp.src([...])
.pipe(sass())
.pipe(concat('scss-files.scss'))
;
var cssStream = gulp.src([...])
.pipe(concat('css-files.css'))
;
var mergedStream = merge(lessStream, scssStream, cssStream)
.pipe(concat('styles.css'))
.pipe(minify())
.pipe(gulp.dest('web/css'));
return mergedStream;
});