UNPKG

2.11 kBJavaScriptView Raw
1const fs = require('fs');
2const path = require('path');
3const zlib = require('zlib');
4const rollup = require('rollup');
5const terser = require('terser');
6
7let builds = require('./config').getAllBuilds();
8build(builds);
9
10function build(builds) {
11 let built = 0;
12 const total = builds.length;
13 const next = () => {
14 buildEntry(builds[built]).then(() => {
15 built++;
16 if (built < total) {
17 next()
18 }
19 }).catch(logError)
20 };
21
22 next()
23}
24
25function buildEntry(config) {
26 const output = config.output;
27 const {file, banner} = output;
28 const isProd = /\.min\./.test(file);
29 return rollup.rollup(config)
30 .then(bundle => bundle.generate(output))
31 .then(({output: [{code}]}) => {
32 if (isProd) {
33 const minified = (banner ? banner + '\n' : '') + terser.minify(code, {
34 toplevel: true,
35 output: {
36 ascii_only: true
37 },
38 compress: {
39 pure_funcs: ['makeMap']
40 }
41 }).code;
42 return write(file, minified, true)
43 } else {
44 return write(file, code)
45 }
46 })
47}
48
49function write(dest, code, zip) {
50 return new Promise((resolve, reject) => {
51 function report(extra) {
52 console.log(blue(path.relative(process.cwd(), dest)) + ' ' + getSize(code) + (extra || ''));
53 resolve()
54 }
55
56 fs.writeFile(dest, code, err => {
57 if (err) return reject(err);
58 if (zip) {
59 zlib.gzip(code, (err, zipped) => {
60 if (err) return reject(err);
61 report(' (gzipped: ' + getSize(zipped) + ')')
62 })
63 } else {
64 report()
65 }
66 })
67 })
68}
69
70function getSize(code) {
71 return (code.length / 1024).toFixed(2) + 'kb'
72}
73
74function logError(e) {
75 console.log(e)
76}
77
78function blue(str) {
79 return '\x1b[1m\x1b[34m' + str + '\x1b[39m\x1b[22m'
80}