-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgulpfile.js
102 lines (92 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
const gulp = require("gulp");
const gutil = require("gulp-util");
const sass = require("gulp-sass");
const base64Inline = require("gulp-base64-inline");
const browserify = require("browserify");
const source = require("vinyl-source-stream");
const tsify = require("tsify");
const buffer = require("vinyl-buffer");
const fs = require("fs");
const pathUtils = require("path");
const terser = require("gulp-terser");
const path = {
out: "bin/build",
tsEntryPoint: "src/app/app.ts",
scssFiles: "res/styles/app/**/*.scss",
scssEntryPoint: "res/styles/app/**/*.scss",
externalOut: "external",
externalConfig: "external-config.json",
};
const config = {
sass: (debug)=> ({
outputStyle: !debug ? "compressed" : undefined,
}),
babel: (debug) => ({
presets: !debug ? ["@babel/env"] : [],
extensions: [".ts"],
}),
browserify: (debug, entryPoint) => ({
debug,
entries: [entryPoint],
extensions: [".babel"],
cache: {},
packageCache: {},
plugin: "tsify",
}),
external: JSON.parse(fs.readFileSync(path.externalConfig)),
};
function buildTs(entryPoint, out, debug) {
const stream = browserify(config.browserify(debug, entryPoint))
.plugin(tsify)
.transform("brfs");
if (!debug) {
stream.transform("babelify", config.babel(debug));
}
let errors = [];
return stream
.bundle()
.on("error", (error) => {
errors.push(error.message)
})
.on("end", () => {
if (errors.length) {
throw errors.join('\n');
}
})
.pipe(source("index.js"))
.pipe(buffer())
.pipe(debug ? gutil.noop() : terser())
.pipe(gulp.dest(out));
}
function buildScss(entryPoint, out, debug) {
return gulp.src(entryPoint)
.pipe(sass(config.sass(debug)))
.pipe(base64Inline())
.pipe(gulp.dest(out));
}
gulp.task("build-external", () => {
const buildPromises = [];
for (const externalConf of config.external) {
const externalDir = pathUtils.join(path.externalOut, externalConf.name.toLowerCase().replace(/[-_.]/g, ""));
buildPromises.push(buildTs(externalConf.tsEntryPoint, externalDir, gutil.env.debug));
buildPromises.push(buildScss(externalConf.scssEntryPoint, externalDir, gutil.env.debug));
}
return Promise.all(buildPromises);
});
gulp.task("compile-ts", () => {
return buildTs(
path.tsEntryPoint,
path.out,
gutil.env.debug
)
});
gulp.task("compile-scss", () => {
return buildScss(path.scssEntryPoint, path.out, gutil.env.debug);
});
gulp.task("watch-scss", ["compile-scss"], () => {
gutil.env.debug = true;
gulp.watch(path.scssFiles, ["compile-scss"]).on('error', error => console.log(error));
});
gulp.task("build", ["compile-ts", "compile-scss"]);
gulp.task("watch", ["watch-scss"]);
gulp.task("default", ["build", "watch"]);