/
gulpfile.js
138 lines (127 loc) · 3.42 KB
/
gulpfile.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
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
108
109
110
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
const { src, dest, parallel, series, watch } = require('gulp');
const csslint = require('gulp-csslint');
const autoprefixer = require('gulp-autoprefixer');
const minify = require('gulp-minify');
const cleanCss = require('gulp-clean-css');
const rename = require('gulp-rename');
const header = require('gulp-header');
const eslint = require('gulp-eslint');
const fs = require('fs-extra');
const htmlMin = require('gulp-htmlmin');
const browserify = require('browserify');
const source = require('vinyl-source-stream');
const buffer = require('vinyl-buffer');
const sass = require('gulp-sass');
var packageJson = null;
var banner = [
'/**',
' * <%= pkg.name %> - <%= pkg.description %>',
' * @version v<%= pkg.version %>',
' * @link <%= pkg.homepage %>',
' * @author <%= pkg.author.name %> - <%= pkg.author.url %>',
' * @license <%= pkg.license %>',
' */',
''
].join('\n');
/**
* Process HTML files.
*/
function html() {
return src('./src/html/component.html')
.pipe(htmlMin({ collapseWhitespace: true }))
.pipe(rename('./src/html/component-min.html'))
.pipe(dest('./'));
}
/**
* Process CSS file.
*/
function css() {
return src('./src/scss/component.scss')
.pipe(sass())
.pipe(csslint())
.pipe(csslint.formatter())
.pipe(
autoprefixer({
browsers: ['last 2 versions'],
cascade: false
})
)
.pipe(cleanCss())
.pipe(rename('./src/css/component-min.css'))
.pipe(dest('./'));
}
/**
* Process the JavaScript library file.
*/
function js() {
packageJson = fs.readJsonSync('./package.json');
return src('./src/js/mailtoui.js')
.pipe(eslint())
.pipe(eslint.format())
.pipe(minify({ noSource: true }))
.pipe(header(banner, { pkg: packageJson }))
.pipe(dest('dist'));
}
/**
* Lint JavaScript file used on demo page.
*/
function lintDemoJs() {
return src('./demo/demo.js')
.pipe(eslint())
.pipe(eslint.format());
}
/**
* Process JavaScript file used on demo page.
*/
function processDemoJs() {
return browserify('./demo/demo.js')
.bundle()
.pipe(source('./demo/demo.js'))
.pipe(buffer())
.pipe(minify({ noSource: true }))
.pipe(dest('./'));
}
/**
* Process CSS file used on demo page.
*/
function demoCss() {
return src('./demo/demo.scss')
.pipe(sass())
.pipe(csslint())
.pipe(csslint.formatter())
.pipe(
autoprefixer({
browsers: ['last 2 versions'],
cascade: false
})
)
.pipe(cleanCss())
.pipe(rename('./demo/demo-min.css'))
.pipe(dest('./'));
}
/**
* The all seeing eye...
*/
function watchFiles() {
watch('./src/html/component.html', html);
watch('./src/scss/component.scss', css);
watch(['./src/js/mailtoui.js', './package.json'], series(js, lintDemoJs, processDemoJs));
watch('./demo/demo.scss', demoCss);
watch('./demo/demo.js', demoJs);
}
/**
* Define complex tasks.
*/
const demoJs = series(lintDemoJs, processDemoJs);
const build = series(parallel(html, css), js, demoJs, demoCss);
const watching = series(build, watchFiles);
/**
* Make tasks available to the outside world.
*/
exports.html = html;
exports.css = css;
exports.js = js;
exports.demoJs = demoJs;
exports.demoCss = demoCss;
exports.watch = watching;
exports.default = build;