forked from riley-martine/SECURED
-
Notifications
You must be signed in to change notification settings - Fork 0
/
gulpfile.babel.js
140 lines (117 loc) · 3.14 KB
/
gulpfile.babel.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
139
140
'use strict';
import gulp from 'gulp';
import del from 'del';
import notify from 'gulp-notify';
import merge from 'merge-stream';
import browserSync from 'browser-sync';
var server = browserSync.create();
import sass from 'gulp-sass';
import sassLint from 'gulp-sass-lint';
import cleanCSS from 'gulp-clean-css';
import autoprefixer from 'gulp-autoprefixer';
import uncss from 'gulp-uncss';
import htmlmin from 'gulp-htmlmin';
import pug from 'gulp-pug';
import puglint from 'gulp-pug-lint';
import imagemin from 'gulp-imagemin';
const paths = {
scripts: {
lib: 'src/lib/scripts/*.js', // The only scripts we use come from someone else
dest: 'dist/scripts/'
},
styles: {
src: 'src/scss/**/*.scss',
lib: 'src/lib/css/*.css',
dest: 'dist/css'
},
images: {
src: 'src/img/**/*.*',
dest: 'dist/img'
},
views: {
all: 'src/views/**/*', // Refresh on updates to anything in views
src: ['src/views/*.pug', 'src/views/*.html'], // Pages to generate
base: 'src/views/',
dest: 'dist'
},
};
gulp.task('clean', () => {
return del(['dist']);
});
var sassOptions = {
errLogToConsole: true,
outputStyle: 'expanded'
};
gulp.task('sass', () => {
var css = gulp.src([paths.styles.src])
.pipe(sassLint())
.pipe(sassLint.format())
.pipe(sass(sassOptions)).on('error', sass.logError)
.pipe(autoprefixer());
var lib = gulp.src(paths.styles.lib);
return merge(css, lib)
.pipe(uncss({
html: ['dist/**/*.html']
}))
.pipe(cleanCSS({
debug: true
}, function(details) {
console.log(details.name + ': ' + details.stats.originalSize);
console.log(details.name + ': ' + details.stats.minifiedSize);
}))
.pipe(gulp.dest(paths.styles.dest))
.pipe(browserSync.stream({
match: '**/*.css'
})); // CSS glob allows for streaming w/ sourcemaps
});
gulp.task('pug', () => {
return gulp.src(paths.views.src, {
base: paths.views.base
})
.pipe(puglint())
.pipe(pug({
locals: {
require: require
}
})).on('error', notify.onError(function(error) {
return 'An error occurred while compiling pug.\nLook in the console for details.\n' + error;
}))
.pipe(htmlmin({
collapseWhitespace: true
}))
.pipe(gulp.dest(paths.views.dest));
reload;
});
gulp.task('images', () => {
return gulp.src(paths.images.src)
.pipe(imagemin())
.pipe(gulp.dest(paths.images.dest));
});
gulp.task('compile', gulp.series(gulp.series('pug', 'sass')), (done) => {
// Does not default to doing images because that takes too long
done();
});
function reload(done) {
server.reload();
done();
}
function serve(done) {
server.init({
server: {
baseDir: './dist'
}
});
done();
}
gulp.task('serve', gulp.series('compile', serve));
gulp.task('watch', () => {
gulp.watch(paths.styles.src, gulp.series('sass', reload));
gulp.watch(paths.views.all, gulp.series('pug', 'sass', reload));
gulp.watch(paths.images.src, gulp.series('images', reload));
});
/*
gulp.task('dist', gulp.series('clean', gulp.parallel('sass-dist', 'pug', 'images')), () => {
done();
});
*/
gulp.task('default', gulp.parallel('serve', 'watch'));