-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgulpfile.babel.js
79 lines (68 loc) · 2.19 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
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 watch from 'gulp-watch'
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('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/*.css')
.pipe(postcss([cssImport({from: './src/css/main.css'}), cssnext()]))
.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()
})
})
// Development server with browsersync
gulp.task('server', ['hugo', 'css', 'js'], () => {
browserSync.init({
server: {
baseDir: './dist'
}
})
watch('./src/js/**/*.js', () => { gulp.start(['js']) })
watch('./src/css/**/*.css', () => { gulp.start(['css']) })
watch('./site/**/*', () => { gulp.start(['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')
}
})
}