-
Notifications
You must be signed in to change notification settings - Fork 11
/
less.js
76 lines (58 loc) · 2 KB
/
less.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*jshint esnext: true*/
import _isUndefined from 'lodash/isUndefined';
import _merge from 'lodash/merge';
import _forEach from 'lodash/forEach';
import filter from 'gulp-filter';
import plumber from 'gulp-plumber';
import less from 'gulp-less';
import lessDependents from 'gulp-less-dependents';
import sourcemaps from 'gulp-sourcemaps';
import chmod from 'gulp-chmod';
import lessPluginCleanCSS from 'less-plugin-clean-css';
let cleancss = new lessPluginCleanCSS({advanced: true});
class LessTask {
setOptions(options) {
this.options = options;
if (_isUndefined(this.options.src)) {
throw new Error('LessTask: src is missing from configuration!');
}
if (_isUndefined(this.options.dest)) {
throw new Error('LessTask: dest is missing from configuration!');
}
if (_isUndefined(this.options.sourcemaps)) {
this.options.sourcemaps = true;
}
if (this.options.notify) {
this.options.plumberOptions = this.options.defaultErrorHandler;
}
this.options.sourcemapOptions = _merge({}, this.options.sourcemapOptions);
this.options.plumberOptions = _merge({}, this.options.plumberOptions);
return this;
}
defineTask(gulp) {
let options = this.options;
gulp.task(options.taskName, options.taskDeps, () => {
let chain = gulp.src(options.src)
.pipe(lessDependents())
.pipe(plumber(options.plumberOptions));
if (options.sourcemaps) {
chain = chain.pipe(sourcemaps.init());
}
// enable cleancss if we have sourcemaps which will make them readable
let plugins = options.sourcemaps ? [cleancss] : [];
chain = chain.pipe(less({plugins: plugins}));
if (options.sourcemaps) {
chain = chain.pipe(sourcemaps.write('.', options.sourcemapOptions));
}
if (!_isUndefined(options.chmod)) {
chain = chain.pipe(chmod(options.chmod));
}
chain = chain.pipe(gulp.dest(options.dest)).pipe(filter(['*', '!*.css.map']));
_forEach(options.globalBrowserSyncs, (bs) => {
chain = chain.pipe(bs.stream());
});
return chain;
});
}
}
module.exports = LessTask;