Newer
Older
var minimist = require('minimist');
var lazypipe = require('lazypipe');
// command line arguments
var varg = minimist(process.argv.slice(2), {
string: 'env',
default: { env: process.env.NODE_ENV || 'debug' }
});
var options = {
opt: varg.env !== 'debug' || varg.release,
inc: !varg.force,
beauty: varg.beauty || varg.rainbow,
};
// gulp
// common
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');
// css/less
var prefix = require('gulp-autoprefixer'); //префиксы
var minifyCss = require('gulp-minify-css'); //минификация
// var concatCss = require('gulp-concat-css'); //конкатенация
// js
var uglify = require('gulp-uglify');
var prettify = options.beauty? require('gulp-jsbeautifier'): empty;
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/'
};
})();
var pipes = (function() {
var cssPipe = lazypipe()
.pipe(prefix, 'last 2 versions', '> 1%', 'ie9')
//.pipe(rename, {suffix: '.min'})
.pipe(options.opt? minifyCss: prettify);
var lessPipe = lazypipe()
.pipe(less)
.pipe(cssPipe);
var jsPipe = lazypipe()
.pipe(options.opt? uglify: prettify);
return {
css: cssPipe,
less: lessPipe,
js: jsPipe
}
})();
var ext = {
css: '.css',
less: '.css',
js: '.js'
// =============================
// helpers
// =============================
var constructHandler = function(msg) {
return function() {
process.stdout.write('>>> ' + msg + '\n');
};
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
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')
};
}
var constructTask = function(config) {
var dump = function(e) { throw e; };
var errorHandler = config.error || dump;
var midPipe = config.pipe || empty;
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));
var constructWatch = function(config) {
gulp.watch(config.src, function(event) {
constructTask(config);
});
}
// =============================
// rules
// =============================
constructTask(getConfig('less'));
});
gulp.task('css:copy', function() {
constructTask(getConfig('css'));
constructTask(getConfig('js'));
constructTask({
src: paths.src.config,
dst: paths.dst.config
});
// todo:
var app = paths.root + '/~dev_rating/application';
fs.mkdir(dirs[0], function() {});
fs.mkdir(dirs[1], function() {
fs.mkdir(dirs[2], function() {});
// =============================
// watch
// =============================
gulp.task('watch', function (event) {
constructWatch(getConfig('less', event.path));
constructWatch(getConfig('css', event.path));
constructWatch(getConfig('js', event.path));
// =============================
// common tasks
// =============================
gulp.task('config', [
'config:copy'
]);
gulp.task('default', [
'less:compile',
'css:copy',
'js:copy',
]);
gulp.task('install', [
'folders:create',
'config',
'default'