-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgulpfile.js
More file actions
71 lines (60 loc) · 2.11 KB
/
gulpfile.js
File metadata and controls
71 lines (60 loc) · 2.11 KB
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
const gulp = require("gulp");
const sass = require("gulp-sass")(require("sass"))
const pug = require("gulp-pug")
const rename = require("gulp-rename")
const fs = require("fs");
const browserSync = require('browser-sync').create();
const exec = require("util").promisify(require("child_process").exec);
let dest = "build";
let hash = undefined;
exports.styles = function styles() {
return gulp.src(["src/**/*.scss", "!src/**/_*"])
.pipe(sass.sync())
.pipe(rename({extname: ".css"}))
.pipe(gulp.dest(dest))
}
exports.views = function views() {
return gulp.src(["src/**/*.pug", "!src/**/_*"])
.pipe(rename({extname: ".html"}))
.pipe(pug(
{
pretty: true,
locals: {'hash' : hash}
}
))
.pipe(gulp.dest(dest))
}
exports.resources = function resources() {
return gulp.src(["src/**/*", "!src/**/*.pug", "!src/**/*.scss", "!src/**/_*"])
.pipe(gulp.dest(dest))
}
exports.revision = async function revision() {
let json = {};
await exec("git update-index --refresh").catch(() => {});
await exec("git diff-index --quiet HEAD --").catch(() => {json['uncommitted_changes'] = true;});
hash = (await exec("git rev-parse HEAD")).stdout.trim();
json['timestamp'] = parseInt((await exec(`git show ${hash} -s --format="%ct"`)).stdout);
json['hash'] = hash;
await fs.promises.writeFile(`${dest}/revision.json`, JSON.stringify(json));
}
exports.clean = async function clean() {
await fs.promises.rm(dest, {recursive: true, force: true});
await fs.promises.mkdir(dest);
}
exports.serve = function serve(cb) {
browserSync.init({
server: {
baseDir: dest
}
});
cb();
}
exports.refresh = function refresh(cb) {
browserSync.reload("**/*");
cb();
}
exports.build = gulp.series(exports.clean, exports.revision, gulp.parallel(exports.styles, exports.views, exports.resources));
exports.watch = function watch() {
gulp.watch("src/**/*", gulp.series(exports.build, exports.refresh));
}
exports.default = gulp.series(exports.build, exports.serve, exports.watch);