-
Notifications
You must be signed in to change notification settings - Fork 0
/
gulpfile.babel.js
109 lines (93 loc) · 2.61 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
const { src, dest, series, watch } = require('gulp');
const cp = require("child_process");
const gutil = require("gulp-util");
const postcss = require("gulp-postcss");
const cssImport = require("postcss-import");
const cssnext = require("postcss-cssnext");
const BrowserSync = require("browser-sync");
const webpack = require("webpack");
const webpackConfig = require("./webpack.conf");
const svgstore = require("gulp-svgstore");
const svgmin = require("gulp-svgmin");
const inject = require("gulp-inject");
const cssnano = require("cssnano");
const browserSync = BrowserSync.create();
const hugoBin = `./bin/hugo.${process.platform === "win32" ? "exe" : process.platform}`;
const defaultArgs = ["-d", "../dist", "-s", "site"];
if (process.env.DEBUG) {
defaultArgs.unshift("--debug");
}
function hugo(cb) {
buildSite(cb)
}
function hugoPreview(cb) {
buildSite(cb, ["--buildDrafts", "--buildFuture"])
}
function build(cb) {
return series(css, js, hugo)(cb);
}
function buildPreview(cb) {
return series(css, js, hugoPreview)(cb);
}
function css() {
return src("./src/css/*.css")
.pipe(postcss([
cssImport({from: "./src/css/main.css"}),
cssnext(),
cssnano(),
]))
.pipe(dest("./dist/css"))
.pipe(browserSync.stream());
}
function 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();
});
}
function svg() {
const svgs = src("site/static/img/icons-*.svg")
.pipe(svgmin())
.pipe(svgstore({inlineSvg: true}));
function fileContents(filePath, file) {
return file.contents.toString();
}
return src("site/layouts/partials/svg.html")
.pipe(inject(svgs, {transform: fileContents}))
.pipe(dest("site/layouts/partials/"));
}
function server() {
build();
browserSync.init({
server: {
baseDir: "./dist"
}
});
watch("./src/js/**/*.js", js);
watch("./src/css/**/*.css", css);
watch("./site/static/img/icons-*.svg", svg);
watch("./site/**/*", hugo);
}
function buildSite(cb, options) {
const args = options ? defaultArgs.concat(options) : defaultArgs;
return cp.spawn(hugoBin, args, {stdio: "inherit"}).on("close", (code) => {
if (code === 0) {
browserSync.reload("notify:false");
cb();
} else {
browserSync.notify("Hugo build failed :(");
cb("Hugo build failed");
}
});
}
exports.hugo = hugo;
exports.start = server;
exports.build = build;
exports.webpack = js;
exports.preview = buildPreview;