Skip to content

Instantly share code, notes, and snippets.

@totya24
Last active December 13, 2016 11:51
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save totya24/864ba6849901cb30a03de5ec73b2f301 to your computer and use it in GitHub Desktop.
Save totya24/864ba6849901cb30a03de5ec73b2f301 to your computer and use it in GitHub Desktop.
Our gulpfile
var gulp = require('gulp');
var gutil = require('gulp-util');
var autoprefixer = require('gulp-autoprefixer');
var sass = require('gulp-sass');
var concat = require('gulp-concat');
var cleanCSS = require('gulp-clean-css');
var newer = require('gulp-newer');
var uglify = require('gulp-uglify');
var order = require("gulp-order");
var cssBase64 = require('gulp-css-base64');
var sourcemaps = require('gulp-sourcemaps');
var csslint = require('gulp-csslint');
var baseDir = [your/path];
var devDirCss = baseDir + '/assets/css/scss/';
var prodDirCss = baseDir + '/assets/css/';
var devDirStorage = baseDir + '/assets/css/tmp/';
var devDirJs = baseDir + '/assets/js/source/';
var prodDirJs = baseDir + '/assets/js/';
var cssOrder = ['base/reset.css','base/base.css','base/typo.css','base/helper.css','layouts/*.css','components/*.css','*.css'];
var jsOrder = ['package.*.js','extends.js','functions.js','init.js','*.js'];
/** Custom error logger - prevent crashing gulp task on error */
function onError(err) {
gutil.log(gutil.colors.bgRed(err));
gutil.beep();
gutil.beep();
gutil.beep();
this.emit('end');
err.emit('end');
}
/** CSS lint - Rules: https://github.com/CSSLint/csslint/wiki/Rules-by-ID */
gulp.task('lint', function(){
return gulp.src(devDirStorage+'**/*.css')
.pipe(csslint({
"important": true,
"adjoining-classes": false,
"known-properties": false,
"box-sizing": true,
"box-model": false,
"overqualified-elements": false,
"display-property-grouping": false,
"bulletproof-font-face": false,
"compatible-vendor-prefixes": false,
"regex-selectors": false,
"errors": true,
"duplicate-background-images": false,
"duplicate-properties": true,
"empty-rules": true,
"selector-max-approaching": false,
"gradients": false,
"fallback-colors": false,
"font-sizes": false,
"font-faces": false,
"floats": false,
"star-property-hack": false,
"outline-none": false,
"import": false,
"ids": false,
"underscore-property-hack": false,
"rules-count": false,
"qualified-headings": false,
"selector-max": false,
"shorthand": false,
"text-indent": false,
"unique-headings": false,
"universal-selector": false,
"unqualified-attributes": false,
"vendor-prefix": false,
"zero-units": true
}))
.pipe(csslint.reporter(customReporter));
});
/** custom CSSlint reporter */
var customReporter = function(file) {
gutil.log(gutil.colors.inverse(file.path + ' - ' + file.csslint.errorCount + ' hiba'));
file.csslint.results.forEach(function(result) {
if(result.error.line){
gutil.log(gutil.colors.cyan(result.error.line) + "\t\t" + result.error.message);
} else {
gutil.log(gutil.colors.bgRed(result.error.message));
}
});
gutil.log("");
};
/** CSS init - process all scss files on startup or deploy */
gulp.task('initCss', function(){
gulp.src(devDirCss+'**/*.scss')
.pipe(sass().on('error',gutil.log))
.pipe(gulp.dest(devDirStorage).on('end',function(){
gulp.src(devDirStorage+'**/*.css')
.pipe(sourcemaps.init())
.pipe(order(cssOrder))
.pipe(concat('style.css'))
.pipe(gulp.dest(prodDirCss))
.pipe(cleanCSS())
.pipe(autoprefixer())
.pipe(cssBase64({
baseDir: "../svg",
maxWeightResource: 1000,
extensionsAllowed: ['.svg']
}))
.pipe(concat('style.min.css').on('end',function(){
gutil.log(gutil.colors.green("init - scss files processed"));
}))
.pipe(sourcemaps.write('.',{includeContent: false, sourceRoot: 'tmp'}))
.pipe(gulp.dest(prodDirCss));
})
);
});
/** Watch scss files, compile then concat into public folder and minify - watcher task, process only modified files */
gulp.task('watchScss', function(){
gulp.src(devDirCss+'**/*.scss')
.pipe(newer(devDirStorage))
.pipe(sass().on('error',gutil.log))
.pipe(gulp.dest(devDirStorage).on('end',function(){
gutil.log(gutil.colors.green("watch - all scss files compiled"));
gulp.src(devDirStorage+'**/*.css')
.pipe(sourcemaps.init())
.pipe(order(cssOrder))
.pipe(concat('style.css').on('end',function(){
gutil.log(gutil.colors.green("watch - style.css created"));
}))
.pipe(gulp.dest(prodDirCss))
.pipe(cleanCSS())
.pipe(autoprefixer())
.pipe(cssBase64({
baseDir: "../svg",
maxWeightResource: 1000,
extensionsAllowed: ['.svg']
}))
.pipe(concat('style.min.css').on('end',function(){
gutil.log(gutil.colors.green("watch - style.min.css created"));
}))
.pipe(sourcemaps.write('.',{includeContent: false, sourceRoot: 'tmp'}))
.pipe(gulp.dest(prodDirCss));
})
);
});
/** Process javascript files, minify then copy into public folder - initial task, process all js */
gulp.task('initJs', function() {
gulp.src(devDirJs+'*.js')
.pipe(uglify())
.pipe(order(jsOrder))
.pipe(concat('scripts.min.js'))
.pipe(gulp.dest(prodDirJs))
.on('error', onError);
gutil.log(gutil.colors.yellow("init - js files processed"));
});
/** Watch javascript files, minify then copy into public folder - watcher task, process only modified files */
gulp.task('watchJs', function() {
gulp.src(devDirJs+'*.js')
.pipe(newer(prodDirJs))
.pipe(uglify())
.pipe(order(jsOrder))
.pipe(concat('scripts.min.js'))
.pipe(gulp.dest(prodDirJs))
.on('error', onError);
gutil.log(gutil.colors.yellow("watch - javascript files merged and minified"));
});
/** Deploy task for automation - without watchers */
gulp.task('deploy', ['initCss','initJs']);
/** Help task - list all available task with description */
gulp.task('help', function() {
gutil.log(gutil.colors.green("initCss")+"\tLefordítja az scss fájlokat, autoprefixel, összefűz, minimalizál -> style.min.css");
gutil.log(gutil.colors.green("watchScss")+"\tAz előző task watcher formája - csak a módosult fájlokkal dolgozik");
gutil.log(gutil.colors.green("initJs")+"\tÖsszefűzi a javascript fájlokat, minimalizál ->scripts.min.js");
gutil.log(gutil.colors.green("watchJs")+"\tAz előző task watcher formája - csak a módosult fájlokkal dolgozik");
gutil.log(gutil.colors.green("deploy")+"\tLetuttatja az init taskokat");
gutil.log(gutil.colors.green("lint")+"\t\tCss Lint a lefordított css fájlokra");
gutil.log(gutil.colors.green("dafault")+"\tLetuttatja az init taskokat és elindítja a watchereket");
});
/** Default task - init and watcher */
gulp.task('default', ['initCss','initJs'], function(){
gulp.watch(devDirCss + '**/*.scss', ['watchScss']);
gulp.watch(devDirJs + '*.js', ['watchJs']);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment