-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgulpfile.babel.js
97 lines (84 loc) · 2.44 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
import gulp from 'gulp';
import { spawn } from 'child_process';
import hugoBin from 'hugo-bin';
import gutil from 'gulp-util';
import postcss from 'gulp-postcss';
import cssImport from 'postcss-import';
import cssnext from 'postcss-cssnext';
import BrowserSync from 'browser-sync';
import imagemin from 'gulp-imagemin';
import cssnano from 'cssnano';
import cache from 'gulp-cache';
import webpack from 'webpack';
import webpackConfig from './webpack.conf';
const browserSync = BrowserSync.create();
// Hugo arguments
const hugoArgsDefault = ['-d', '../dist', '-s', 'site', '-v'];
const hugoArgsPreview = ['--buildDrafts', '--buildFuture'];
// Development tasks
gulp.task('hugo', cb => buildSite(cb));
gulp.task('hugo-preview', cb => buildSite(cb, hugoArgsPreview));
// Build/production tasks
gulp.task('clear', done => {
return cache.clearAll(done);
});
gulp.task('build', ['css', 'js'], cb => buildSite(cb, [], 'production'));
gulp.task('build-preview', ['css', 'js'], cb =>
buildSite(cb, hugoArgsPreview, 'production')
);
// Compile CSS with PostCSS
gulp.task('css', () =>
gulp
.src('./src/css/main.css')
.pipe(
postcss([cssImport({ from: './src/css/main.css' }), cssnext(), cssnano()])
)
.pipe(gulp.dest('./dist/css'))
.pipe(browserSync.stream())
);
// Compile Javascript
gulp.task('js', cb => {
const myConfig = Object.assign({}, webpackConfig);
webpack(myConfig, (err, stats) => {
if (err) throw new gutil.PluginError('webpack', err);
gutil.log(
'[webpack]',
stats.toString({
colors: true,
progress: true
})
);
browserSync.reload();
cb();
});
});
gulp.task('fonts', () =>
gulp.src('src/fonts/**/*').pipe(gulp.dest('site/static'))
);
// Development server with browsersync
gulp.task('server', ['hugo', 'css', 'js'], () => {
browserSync.init({
server: {
baseDir: './dist'
}
});
gulp.watch('./src/js/**/*.js', ['js']);
gulp.watch('./src/css/**/*.css', ['css']);
gulp.watch('./site/**/*', ['hugo']);
});
/**
* Run hugo and build the 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');
}
});
}