-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
107 lines (96 loc) · 3.18 KB
/
index.js
File metadata and controls
107 lines (96 loc) · 3.18 KB
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/**
* This file is part of TeamELF
*
* (c) GuessEver <guessever@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
const path = require('path');
const gulp = require('gulp');
const less = require('gulp-less');
const autoprefixer = require('gulp-autoprefixer');
const babel = require('gulp-babel');
const concat = require('gulp-concat');
const streamqueue = require('streamqueue');
const cached = require('gulp-cached');
const remember = require('gulp-remember');
function initialize (options, defaultOutput) {
options = options || {};
options.files = options.files || [];
options.modules = options.modules || [];
options.output = options.output || defaultOutput
}
function handleError (e) {
console.log(e.toString());
this.emit('end');
}
module.exports = function (jsOptions, lessOptions) {
jsOptions = jsOptions || {};
lessOptions = lessOptions || {};
initialize(jsOptions, './dist/app.js');
initialize(lessOptions, './dist/app.css');
gulp.task('default', ['compile-js', 'compile-less']);
gulp.task('compile-less', function () {
const stream = streamqueue({objectMode: true});
return stream.queue(gulp.src(lessOptions.files))
.queue(
gulp.src(lessOptions.modules)
.pipe(cached('less'))
.pipe(less())
.pipe(autoprefixer('last 2 versions'))
.on('error', handleError)
.pipe(remember('less'))
)
.done()
.pipe(concat(path.basename(lessOptions.output)))
.pipe(gulp.dest(path.dirname(lessOptions.output)));
});
gulp.task('compile-js', function () {
const stream = streamqueue({objectMode: true});
stream.queue(gulp.src(jsOptions.files));
for (var name in jsOptions.modules) {
if (!jsOptions.modules.hasOwnProperty(name)) continue;
var modules = jsOptions.modules[name];
stream.queue(
gulp.src(modules)
.pipe(cached('js'))
.pipe(babel({
presets: [
require('babel-preset-env')
],
plugins: [
require('babel-plugin-transform-object-rest-spread'),
require('babel-plugin-transform-react-jsx'),
require('babel-plugin-transform-es2015-modules-systemjs')
],
moduleIds: true,
moduleRoot: name
}))
.on('error', handleError)
.pipe(remember('js'))
);
}
return stream.done()
.pipe(concat(path.basename(jsOptions.output)))
.pipe(gulp.dest(path.dirname(jsOptions.output)));
});
gulp.task('watch', ['default'], function () {
gulp.watch(lessOptions.modules, ['compile-less'], function (e) {
if (e.type === 'deleted') {
delete cached.caches.modules[event.path];
remember.forget('less', e.path);
}
});
for (var name in jsOptions.modules) {
if (!jsOptions.modules.hasOwnProperty(name)) continue;
var modules = jsOptions.modules[name];
gulp.watch(modules, ['compile-js'], function (e) {
if (e.type === 'deleted') {
delete cached.caches.modules[event.path];
remember.forget('js', e.path);
}
})
}
});
};