1 | const gulp = require("gulp");
|
2 | const del = require("del");
|
3 | const sass = require("gulp-sass");
|
4 | const typescript = require("gulp-typescript");
|
5 |
|
6 | const rollupPipe = require("gulp-better-rollup");
|
7 | const babel = require("rollup-plugin-babel");
|
8 | const nodeResolve = require("rollup-plugin-node-resolve");
|
9 | const commonJs = require("rollup-plugin-commonjs");
|
10 |
|
11 |
|
12 | const defaultRollupOptions = [{
|
13 | "plugins": [
|
14 | babel({
|
15 | babelrc: false,
|
16 | comments: false,
|
17 | presets: [['@babel/preset-env', {
|
18 | targets: {
|
19 | "ie": "11"
|
20 | },
|
21 | loose: true,
|
22 | modules: false
|
23 | }]],
|
24 | runtimeHelpers: true,
|
25 | plugins: [
|
26 | ["@babel/transform-runtime"]
|
27 | ]
|
28 | }),
|
29 | commonJs(),
|
30 | nodeResolve()
|
31 | ]
|
32 | }, {
|
33 | "format": "iife"
|
34 | }]
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 | const createGulpfile = (options) => {
|
42 | const {
|
43 | include = {}
|
44 | } = options;
|
45 |
|
46 |
|
47 | let tasks = {};
|
48 |
|
49 | let cleanTask = null;
|
50 | let parallelBuildTasks = [];
|
51 |
|
52 | let watchTasks = [];
|
53 |
|
54 |
|
55 | |
56 |
|
57 |
|
58 | if (include.clean) {
|
59 | const cleanParams = include.clean;
|
60 | const clean = () => del(cleanParams);
|
61 |
|
62 | cleanTask = clean;
|
63 | tasks.clean = clean;
|
64 |
|
65 | }
|
66 |
|
67 | |
68 |
|
69 |
|
70 | if (include.copy) {
|
71 | const copyDefsParam = include.copy;
|
72 | const result = createCopyAll(copyDefsParam);
|
73 |
|
74 | tasks = {...tasks, ...result.tasks};
|
75 | parallelBuildTasks = [...parallelBuildTasks, ...result.parallelBuildTasks];
|
76 | watchTasks = [...watchTasks, ...result.watchTasks];
|
77 | }
|
78 |
|
79 | |
80 |
|
81 |
|
82 | if (include.scss) {
|
83 | const {src, dest, options} = include.scss;
|
84 | const {scss, scssWatch} = createSass(src, dest);
|
85 |
|
86 | tasks.scss = scss;
|
87 | parallelBuildTasks.push(scss);
|
88 | watchTasks.push(scssWatch);
|
89 | }
|
90 |
|
91 | |
92 |
|
93 |
|
94 | if (include.ts) {
|
95 | const {src, dest, tsconfig, clean} = include.ts;
|
96 | const {ts, tsWatch} = createTypeScript(src, dest, tsconfig);
|
97 |
|
98 | let rollupTask;
|
99 | let cleanTask;
|
100 |
|
101 | let rollupOptions = include.ts.rollup;
|
102 |
|
103 | if (rollupOptions) {
|
104 | const {src, dest, options} = rollupOptions;
|
105 |
|
106 | const rollup = () => gulp.src(src)
|
107 | .pipe(rollupPipe(options || defaultRollupOptions))
|
108 | .pipe(gulp.dest(dest));
|
109 |
|
110 | const rollupWatch = () => gulp.watch(src, rollup);
|
111 |
|
112 | tasks.rollup = rollup;
|
113 | rollupTask = rollup;
|
114 | watchTasks.push(rollupWatch);
|
115 | }
|
116 |
|
117 | if (clean) {
|
118 | const tsClean = () => del(clean);
|
119 | tasks.tsClean = tsClean;
|
120 | cleanTask = tsClean;
|
121 | }
|
122 |
|
123 | tsAndRollup = [ts];
|
124 | if (rollupTask) tsAndRollup.push(rollupTask);
|
125 | if (cleanTask) tsAndRollup.push(cleanTask);
|
126 |
|
127 | tasks.ts = ts;
|
128 | parallelBuildTasks.push(tsAndRollup.length > 1 ? gulp.series(...tsAndRollup) : ts);
|
129 | watchTasks.push(tsWatch);
|
130 | }
|
131 |
|
132 |
|
133 |
|
134 |
|
135 | |
136 |
|
137 |
|
138 | const buildTasks = [];
|
139 | if (cleanTask) buildTasks.push(cleanTask);
|
140 | if (parallelBuildTasks.length > 0) buildTasks.push(gulp.parallel(...parallelBuildTasks));
|
141 |
|
142 | const watch = watchTasks.length > 0 ? gulp.parallel(...watchTasks) : done => done();
|
143 | const build = gulp.series(...buildTasks);
|
144 | const buildAndWatch = gulp.series(build, watch);
|
145 |
|
146 | return {
|
147 | ...tasks,
|
148 | watch,
|
149 | build,
|
150 | buildAndWatch,
|
151 | default: buildAndWatch
|
152 | }
|
153 | }
|
154 |
|
155 |
|
156 |
|
157 |
|
158 |
|
159 | const createCopyAll = (copyDefs) => {
|
160 | let tasks = {};
|
161 | const parallelBuildTasks = [];
|
162 | const watchTasks = [];
|
163 |
|
164 | for (const key of Object.keys(copyDefs)) {
|
165 | const [src, dest] = copyDefs[key];
|
166 | const result = createCopy(key, src, dest)
|
167 |
|
168 | tasks = {...tasks, ...result};
|
169 | parallelBuildTasks.push(result[key]);
|
170 | watchTasks.push(result[key + "Watch"]);
|
171 | }
|
172 |
|
173 | return {
|
174 | tasks,
|
175 | parallelBuildTasks,
|
176 | watchTasks
|
177 | }
|
178 | }
|
179 |
|
180 |
|
181 |
|
182 |
|
183 |
|
184 |
|
185 | const createCopy = (name, src, dest) => {
|
186 | const result = {
|
187 | [name]: () => gulp.src(src).pipe(gulp.dest(dest)),
|
188 | [name + "Watch"]: () => gulp.watch(src, copy)
|
189 | }
|
190 | return result;
|
191 | const copy = () => gulp.src(src).pipe(gulp.dest(dest));
|
192 | const copyWatch = () => gulp.watch(src, copy);
|
193 |
|
194 | return {copy, copyWatch};
|
195 | }
|
196 |
|
197 |
|
198 |
|
199 |
|
200 |
|
201 |
|
202 | const createSass = (src, dest) => {
|
203 | const scss = () => gulp.src(src)
|
204 | .pipe(sass())
|
205 | .pipe(gulp.dest(dest))
|
206 |
|
207 | const scssWatch = () => gulp.watch(src, scss);
|
208 |
|
209 | return {scss, scssWatch}
|
210 | }
|
211 |
|
212 |
|
213 |
|
214 |
|
215 |
|
216 |
|
217 |
|
218 | const createTypeScript = (src, dest, config = "tsconfig.json") => {
|
219 | const ts = () => gulp.src(src)
|
220 | .pipe(typescript.createProject("tsconfig.json")())
|
221 | .pipe(gulp.dest(dest));
|
222 |
|
223 | const tsWatch = () => gulp.watch(src, ts);
|
224 |
|
225 | return {ts, tsWatch};
|
226 | }
|
227 |
|
228 |
|
229 |
|
230 | module.exports = {
|
231 | createGulpfile
|
232 | }
|
233 |
|
234 |
|
235 |
|
236 | console.log(createGulpfile({
|
237 | include: {
|
238 | clean: true,
|
239 | copy: {
|
240 | static: ["./src/static/**/*", "./dist"]
|
241 | },
|
242 | scss: {
|
243 | src: "./src/scss",
|
244 | dest: "./dist"
|
245 | }
|
246 | }
|
247 | })); |
\ | No newline at end of file |