-
Notifications
You must be signed in to change notification settings - Fork 2
/
gulpfile.js
149 lines (134 loc) · 3.48 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
139
140
141
142
143
144
145
146
147
148
149
/**
* Gulp Packages
*/
// General
var gulp = require('gulp');
var fs = require('fs');
var del = require('del');
var lazypipe = require('lazypipe');
var plumber = require('gulp-plumber');
var flatten = require('gulp-flatten');
var tap = require('gulp-tap');
var rename = require('gulp-rename');
var header = require('gulp-header');
var watch = require('gulp-watch');
var sourcemaps = require('gulp-sourcemaps');
var bs = require('browser-sync').create();
// Styles
var sass = require('gulp-sass');
var prefix = require('gulp-autoprefixer');
var minify = require('gulp-cssnano');
// SVGs
var svgmin = require('gulp-svgmin');
var svgstore = require('gulp-svgstore');
/**
* Paths to project folders
*/
var paths = {
input: 'src/**/*',
output: 'dist/',
styles: {
input: 'assets/sass/**/*.{scss,sass}',
output: 'assets/'
},
svgs: {
input: 'assets/svg/*',
output: '_includes/'
},
images: {
input: 'assets/img/*',
output: '_includes/img/'
},
html: {
index: './_site/index.html'
}
};
/**
* Gulp Taks
*/
// Process, lint, and minify Sass files
gulp.task('build:styles', ['clean:dist'], function() {
return gulp.src(paths.styles.input)
.pipe(plumber())
.pipe(sourcemaps.init())
.pipe(sass({
outputStyle: 'expanded',
sourceComments: true
}))
.pipe(flatten())
.pipe(prefix({
browsers: ['last 2 version', '> 1%'],
cascade: true,
remove: true
}))
.pipe(gulp.dest(paths.styles.output))
.pipe(minify({
discardComments: {
removeAll: true
}
}))
.pipe(sourcemaps.write())
.pipe(gulp.dest(paths.styles.output))
.pipe(bs.stream());
});
// Generate SVG sprites - for files that are not directly under ./src/svg
gulp.task('build:svgs', ['clean:dist'], function() {
return gulp.src(paths.svgs.input)
.pipe(plumber())
.pipe(tap(function(file, t) {
if (file.isDirectory()) {
var name = file.relative + '.svg';
return gulp.src(file.path + '/*.svg')
.pipe(svgmin())
.pipe(svgstore({
fileName: name,
prefix: 'icon-',
inlineSvg: true
}))
.pipe(gulp.dest(paths.svgs.output));
}
}))
.pipe(svgmin())
.pipe(gulp.dest(paths.svgs.output));
});
// Copy image files into output folder
gulp.task('build:images', ['clean:dist'], function() {
return gulp.src(paths.images.input)
.pipe(plumber())
.pipe(gulp.dest(paths.images.output));
});
// Remove pre-existing content from output and test folders
gulp.task('clean:dist', function() {
del.sync([
paths.output
]);
});
// Spin up livereload server and listen for file changes
gulp.task('listen', function() {
bs.init({
server: {
baseDir: "./_site",
}
});
gulp.watch('./assets/sass/**/*.scss',['compile'])
gulp.watch(paths.html.index).on('change', bs.reload);
});
/**
* Task Runners
*/
// Compile files
gulp.task('compile', [
'clean:dist',
'build:styles',
'build:images',
'build:svgs'
]);
// Compile files and generate docs (default)
gulp.task('default', [
'compile'
]);
// Compile files and generate docs when something changes
gulp.task('watch', [
'listen',
'default'
]);