-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgulpfile.js
115 lines (94 loc) · 2.72 KB
/
gulpfile.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
110
111
112
113
114
115
const { src, dest, watch, parallel, series } = require("gulp");
var browserify = require("browserify");
var source = require("vinyl-source-stream");
var buffer = require("vinyl-buffer");
const uglify = require("gulp-uglify");
const pug = require("gulp-pug");
const sass = require("gulp-sass");
const connect = require("gulp-connect");
const yaml = require("js-yaml");
const del = require("del");
const fs = require("fs");
const ftp = require("vinyl-ftp");
sass.compiler = require("node-sass");
let config;
const server = (cb) => {
connect.server({
livereload: true,
root: "dist",
});
cb();
};
const loadConfig = (cb) => {
config = yaml.load(fs.readFileSync("./src/config.yaml"));
cb();
};
const copyAssets = (cb) => {
return src("assets/**/*").pipe(dest("dist/"));
};
const buildJS = (cb) => {
const b = browserify({
entries: "src/main.js",
});
return b
.plugin("tinyify")
.bundle()
.pipe(source("main.js"))
.pipe(buffer())
.pipe(dest("dist/"))
.pipe(connect.reload());
};
const buildCSS = (cb) => {
return src("src/scss/*.scss")
.pipe(sass({ outputStyle: "compressed" }).on("error", sass.logError))
.pipe(dest("dist/css/"))
.pipe(connect.reload());
};
const buildHTML = (cb) => {
return src("src/*.pug")
.pipe(
pug({
pretty: false,
data: config,
})
)
.pipe(dest("dist/"))
.pipe(connect.reload());
};
const cleanAll = () => {
return del("dist");
};
const remoteDeployTest = () => {
const ftpconfig = yaml.load(fs.readFileSync("./ftp-config.yaml"));
return deploy(ftpconfig.test);
};
const remoteDeployProd = () => {
const ftpconfig = yaml.load(fs.readFileSync("./ftp-config.yaml"));
return deploy(ftpconfig.prod);
};
const deploy = (config) => {
let conn = ftp.create({
host: config.FTP_SERVER,
user: config.FTP_USER,
password: config.FTP_PASSWORD,
parallel: 10,
});
return src("dist/**/*", { base: "dist", buffer: false })
.pipe(conn.newer(config.FTP_PATH))
.pipe(conn.dest(config.FTP_PATH));
};
const watchers = () => {
watch("src/**/*.js", { ignoreInitial: false }, buildJS);
watch("src/scss/*.scss", { ignoreInitial: false }, buildCSS);
watch("src/**/*.pug", { ignoreInitial: false }, buildHTML);
watch("src/*.yaml", { ignoreInitial: false }, series(loadConfig, buildHTML));
watch("assets/**/*", { ignoreInitial: false }, series(copyAssets, buildHTML));
};
const watchModifications = series(cleanAll, watchers);
exports.default = series(
cleanAll,
parallel(buildCSS, buildJS, copyAssets, series(loadConfig, buildHTML))
);
exports.watch = series(server, watchModifications);
exports.deployTest = series(this.default, remoteDeployTest);
exports.deployProd = series(this.default, remoteDeployProd);