Skip to content
Snippets Groups Projects
gulpfile.js 4.65 KiB
Newer Older
pimka's avatar
pimka committed
'use strict';
var minimist = require('minimist');
var fs = require('fs');
var lazypipe = require('lazypipe');

// command line arguments
var varg = minimist(process.argv.slice(2), {
    string: 'env',
xamgore's avatar
xamgore committed
    default: {env: process.env.NODE_ENV || 'debug'}
});

var options = {
    opt: varg.env !== 'debug' || varg.release,
    inc: !varg.force,
xamgore's avatar
xamgore committed
    beauty: varg.beauty || varg.rainbow
pimka's avatar
pimka committed
var gulp = require('gulp');
var changed = require('gulp-changed');
var empty = require('gulp-empty');

// var plumber = require('gulp-plumber');
// var gulpif = require('gulp-if');
// var rename = require('gulp-rename'); //переименовывание
// var watch = require('gulp-watch');
// var filter = require('gulp-filter');
pimka's avatar
pimka committed
var less = require('gulp-less');
var prefix = require('gulp-autoprefixer'); //префиксы
var minifyCss = require('gulp-minify-css'); //минификация
// var concatCss = require('gulp-concat-css'); //конкатенация

// js
var uglify = require('gulp-uglify');
xamgore's avatar
xamgore committed
var prettify = options.beauty ? require('gulp-jsbeautifier') : empty;
xamgore's avatar
xamgore committed
var paths = new (function () {
    var self = this;
    self.root = '..';

    var app = self.root + '/~dev_rating';
    var media = self.root + '/media';
    var stat = app + '/static';

    self.src = {
        css: media + '/css/**/*.css',
        less: media + '/less/**/*.less',
        js: media + '/js/**/*.js',
        config: self.root + '/config/*'
    };


    self.dst = {
        css: stat + '/css/',
        less: stat + '/css/',
        js: stat + '/js/',
        config: app + '/application/config/'
    };
})();

PavelBegunkov's avatar
PavelBegunkov committed

// =============================
PavelBegunkov's avatar
PavelBegunkov committed
// =============================
pimka's avatar
pimka committed

xamgore's avatar
xamgore committed
var pipes = (function () {
    var cssPipe = lazypipe()
        .pipe(prefix, 'last 2 versions', '> 1%', 'ie9')
        //.pipe(rename, {suffix: '.min'})
xamgore's avatar
xamgore committed
        .pipe(options.opt ? minifyCss : prettify);

    var lessPipe = lazypipe()
        .pipe(less)
        .pipe(cssPipe);

    var jsPipe = lazypipe()
xamgore's avatar
xamgore committed
        .pipe(options.opt ? uglify : prettify);


    return {
        css: cssPipe,
        less: lessPipe,
        js: jsPipe
    }
})();

var ext = {
    css: '.css',
    less: '.css',
    js: '.js'
PavelBegunkov's avatar
PavelBegunkov committed
};
pimka's avatar
pimka committed


// =============================
//          helpers
// =============================

xamgore's avatar
xamgore committed
var constructHandler = function (msg) {
    return function () {
        process.stdout.write('>>> ' + msg + '\n');
    };
xamgore's avatar
xamgore committed
var getConfig = function (type, src, dst, pipe) {
    var _src = src || paths.src[type];
    var _dst = dst || paths.dst[type];
    var _pipe = pipe || pipes[type];

    return {
        src: _src,
        dst: _dst,
        pipe: _pipe,
        changed: options.inc,
        ext: ext[type],
        error: constructHandler(type + ' error')
    };
xamgore's avatar
xamgore committed
};
xamgore's avatar
xamgore committed
var constructTask = function (config) {
    var dump = function (e) {
        throw e;
    };
    var errorHandler = config.error || dump;

    var midPipe = config.pipe || empty;

xamgore's avatar
xamgore committed
    var ext = config.ext ? {extension: config.ext} : {};
    var chgPipe = config.changed ?
        lazypipe().pipe(changed, config.dst, ext) :
        empty;

    gulp.src(config.src)
        .pipe(chgPipe())
        .pipe(midPipe())
        .on('error', errorHandler)
        .pipe(gulp.dest(config.dst));
xamgore's avatar
xamgore committed
var constructWatch = function (config) {
    gulp.watch(config.src, function (event) {
        constructTask(config);
xamgore's avatar
xamgore committed
};
PavelBegunkov's avatar
PavelBegunkov committed

// =============================
//          rules
// =============================
gulp.task('less:compile', function () {
    constructTask(getConfig('less'));
xamgore's avatar
xamgore committed
gulp.task('css:copy', function () {
    constructTask(getConfig('css'));
pimka's avatar
pimka committed
});

xamgore's avatar
xamgore committed
gulp.task('js:copy', function () {
    constructTask(getConfig('js'));
pimka's avatar
pimka committed
});

xamgore's avatar
xamgore committed
gulp.task('config:copy', function () {
    constructTask({
        src: paths.src.config,
        dst: paths.dst.config
    });
xamgore's avatar
xamgore committed
gulp.task('folders:create', function () {
    var app = paths.root + '/~dev_rating/application';
    var dirs = [
        app + '/logs/'
xamgore's avatar
xamgore committed
    fs.mkdir(dirs[0], function () {
    });
    fs.mkdir(dirs[1], function () {
        fs.mkdir(dirs[2], function () {
        });
pimka's avatar
pimka committed
});


PavelBegunkov's avatar
PavelBegunkov committed
// =============================
//          watch
// =============================

gulp.task('watch', function (event) {
    constructWatch(getConfig('less', event.path));
    constructWatch(getConfig('css', event.path));
    constructWatch(getConfig('js', event.path));
pimka's avatar
pimka committed


PavelBegunkov's avatar
PavelBegunkov committed
// =============================
//          common tasks
// =============================

gulp.task('config', [
    'config:copy'
]);

gulp.task('default', [
    'less:compile',
    'css:copy',
xamgore's avatar
xamgore committed
    'js:copy'
PavelBegunkov's avatar
PavelBegunkov committed
]);

gulp.task('install', [
    'folders:create',
    'config',
    'default'