-
Notifications
You must be signed in to change notification settings - Fork 0
/
gulpfile.babel.js
104 lines (90 loc) · 2.85 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
import gulp from 'gulp';
import {spawn} from 'child_process';
import hugoBin from 'hugo-bin';
import BrowserSync from 'browser-sync';
import runSequence from 'run-sequence';
import critical from 'critical';
import postcss from 'gulp-postcss';
import cssImport from 'postcss-import';
import cssnext from 'postcss-cssnext';
import cssclean from 'postcss-clean';
import swPrecache from 'sw-precache';
import htmlmin from 'gulp-htmlmin';
const browserSync = BrowserSync.create();
const outputDirectory = 'dist';
const hugoArgsDefault = ['-d', `../${outputDirectory}`, '-s', 'site', '-v'];
//entry points (thanks npm)
gulp.task('server', (cb) => {
runSequence('hugo',
['bundle-minify-css', 'minify-html', 'bundle-minify-js'],
['critical', 'generate-service-worker'],
'run-server',
cb);
});
gulp.task('build', (cb) => {
runSequence('hugo',
['bundle-minify-css', 'minify-html', 'bundle-minify-js'],
['critical', 'generate-service-worker'],
cb);
});
gulp.task('bundle-minify-css', () => (
gulp.src('./src/css/main.css')
.pipe(postcss([cssImport(), cssnext(), cssclean()]))
.pipe(gulp.dest(`${outputDirectory}/css`))
.pipe(browserSync.stream())
));
gulp.task('bundle-minify-js', () => {
gulp.src('./src/js/**/*.js')
.pipe(gulp.dest(`${outputDirectory}/js`));
})
gulp.task('minify-html', () =>{
return gulp.src(`${outputDirectory}/**/*.html`)
.pipe(htmlmin({collapseWhitespace: true}))
.pipe(gulp.dest(outputDirectory));
});
gulp.task('critical', () => {
return gulp.src(`${outputDirectory}/index.html`)
.pipe(critical.stream({
inline: true,
base: outputDirectory,
minify: true,
width: 1280,
height: 800,
ignore: ['@font-face']
}))
.pipe(gulp.dest(outputDirectory));
});
gulp.task('generate-service-worker', (callback) => {
swPrecache.write(`${outputDirectory}/sw.js`, {
staticFileGlobs: [outputDirectory + '/**/*.{js,html,css,png,jpg,gif,svg,eot,ttf,woff}'],
stripPrefix: outputDirectory
}, callback);
});
gulp.task('hugo', (cb) => buildSite(cb));
gulp.task('run-server', (cb) => {
runServer(cb)
});
//Server up site w/ browsersync
function runServer() {
browserSync.init({
server: {
baseDir: `./${outputDirectory}`
}
});
gulp.watch('./src/js/**/*.js', ['bundle-minify-js']);
gulp.watch('./src/css/main.css', ['bundle-minify-css']);
};
//Build site
function buildSite(cb, options, environment = 'development') {
const args = options ? hugoArgsDefault.concat(options) : hugoArgsDefault;
process.env.NODE_ENV = environment;
return spawn(hugoBin, args, {stdio: 'inherit'}).on('close', (code) => {
if (code === 0) {
browserSync.reload();
cb();
} else {
browserSync.notify('Hugo build failed :(');
cb('Hugo build failed');
}
});
}