-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgulpfile.js
131 lines (116 loc) · 3.29 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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
const path = require("path");
const gulp = require("gulp");
const webpack = require("webpack");
const ws = require("webpack-stream");
const file = require("gulp-file");
const sass = require("gulp-sass");
const sourcemaps = require("gulp-sourcemaps");
const merge = require('merge-stream');
const task_html = done => {
build_html();
done();
}
const task_images = done => {
build_images();
done();
}
const task_gen_package_json = done => {
gen_package_json();
done();
}
const task_ui_script = done => {
build_scripts(PATH_SRC_UI);
done();
}
const task_react_scripts = done => {
copy_react_scripts();
done();
}
const task_ui = gulp.series(task_gen_package_json, task_ui_script, task_react_scripts);
const task_styles = done => {
build_styles();
done();
}
const task_worker = done => {
build_scripts(PATH_SRC_WORKER);
done();
}
const task_copy_release_note = done => {
copy_release_note();
done();
}
exports.default = gulp.parallel(
task_html,
task_images,
task_ui,
task_styles,
task_worker,
task_copy_release_note);
function build_html() {
return gulp
.src(PATH_SRC_HTML + "index.html")
.pipe(gulp.dest(PATH_OUT));
}
function build_images() {
return gulp
.src(PATH_SRC_IMG + "*")
.pipe(gulp.dest(PATH_OUT));
}
function build_scripts(src) {
let cfg = require(src + "webpack.config.js")();
const entry = cfg.entry;
delete cfg.entry;
cfg.mode = "production";
return gulp
.src(path.resolve(src, entry.substr(2)))
.pipe(ws(cfg, webpack))
.pipe(gulp.dest(PATH_OUT));
}
function build_styles() {
const options = {
outputStyle: "compressed"
};
return gulp
.src(PATH_SRC_STYLES + "*.scss")
.pipe(sourcemaps.init())
.pipe(sass(options))
.pipe(sourcemaps.write("./"))
.pipe(gulp.dest(PATH_OUT));
}
function gen_package_json() {
const pkg = require("./package.json");
const json = {
title: pkg["title"],
version: pkg["version"],
author: pkg["author"],
homepage: pkg["homepage"],
bugs_url: pkg["bugs"]["url"],
release_notes: pkg["release-notes"]["url"],
build_time: LAST_BUILD_TIME
}
return file("package.g.json", JSON.stringify(json), {
src: true
})
.pipe(gulp.dest(PATH_SRC_UI));
}
function copy_release_note() {
return gulp
.src("./RELEASES.md")
.pipe(gulp.dest(PATH_OUT));
}
function copy_react_scripts() {
return merge(
gulp.src("./node_modules/react/umd/react.production.min.js"),
gulp.src("./node_modules/react-dom/umd/react-dom.production.min.js"),
gulp.src("./node_modules/redux/dist/redux.min.js"),
gulp.src("./node_modules/react-redux/dist/react-redux.min.js")
).pipe(gulp.dest(PATH_OUT));
}
const PATH_SRC = "./src/";
const PATH_SRC_HTML = PATH_SRC + "ui/html/";
const PATH_SRC_IMG = PATH_SRC + "ui/images/";
const PATH_SRC_UI = PATH_SRC + "ui/scripts/";
const PATH_SRC_WORKER = PATH_SRC + "worker/";
const PATH_SRC_STYLES = PATH_SRC + "ui/styles/";
const PATH_OUT = "./out/dist/";
const LAST_BUILD_TIME = new Date().toUTCString();