forked from nolimits4web/swiper
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.js
74 lines (66 loc) · 2.1 KB
/
build.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
const chalk = require('chalk');
const fs = require('fs-extra');
const elapsed = require('elapsed-time-logger');
const buildJsCore = require('./build-js-core');
const buildJsBundle = require('./build-js-bundle');
const buildTypes = require('./build-types');
const buildReact = require('./build-react');
const buildVue = require('./build-vue');
const buildSvelte = require('./build-svelte');
const buildStyles = require('./build-styles');
const buildAngular = require('./build-angular');
const outputCheckSize = require('./check-size');
const { outputDir } = require('./utils/output-dir');
class Build {
constructor() {
this.argv = process.argv.slice(2).map((v) => v.toLowerCase());
this.size = this.argv.includes('--size');
this.tasks = [];
return this;
}
add(flag, buildFn) {
if (!this.argv.includes('--only') || this.argv.includes(flag)) {
this.tasks.push(() => buildFn());
}
return this;
}
async run() {
if (!this.argv.includes('--only')) {
await fs.remove(`./${outputDir}`);
await fs.ensureDir(`./${outputDir}`);
}
await fs.copy('./src/copy/', `./${outputDir}`);
let start;
let end;
if (this.size) {
start = outputCheckSize();
}
const res = await Promise.all(this.tasks.map((buildFn) => buildFn())).catch((err) => {
console.error(err);
process.exit(1);
});
if (this.size) {
const sizeMessage = (value, label = '') =>
`difference ${label}: ${value > 0 ? chalk.red(`+${value}`) : chalk.green(value)} bytes`;
end = outputCheckSize();
console.log(sizeMessage(end.size - start.size));
console.log(sizeMessage(end.gzippedSize - start.gzippedSize, 'gzipped'));
}
return res;
}
}
(async () => {
elapsed.start('build');
const build = new Build();
await build
.add('types', buildTypes)
.add('styles', buildStyles)
.add('core', buildJsCore)
.add('bundle', buildJsBundle)
.add('react', buildReact)
.add('vue', buildVue)
.add('svelte', buildSvelte)
.add('angular', buildAngular)
.run();
elapsed.end('build', chalk.bold.green('Build completed'));
})();