Fuse/scripts/build.main.js
Kiro Risk e74a9ef305
Changed bundler to Rollup (#367)
- Changed bundler to Rollup
- Added ES6 modules for bundlers and browsers (fixed #262)
- Added CommonJS builds
- Added UMD builds
- Name change so that .min actually reflects the minified version
2020-03-23 08:22:20 -07:00

84 lines
1.8 KiB
JavaScript

const fs = require('fs')
const path = require('path')
const zlib = require('zlib')
const terser = require('terser')
const rollup = require('rollup')
const configs = require('./configs')
if (!fs.existsSync('dist')) {
fs.mkdirSync('dist')
}
build(Object.keys(configs).map(key => configs[key]))
async function build(builds) {
for (const entry of builds) {
try {
await buildEntry(entry)
} catch (err) {
logError(err)
}
}
}
async function buildEntry(config) {
const output = config.output
const { file, banner } = output
const isProd = /(min|prod)\.js$/.test(file)
try {
let bundle = await rollup.rollup(config)
let { output: [{ code }] } = await bundle.generate(output)
if (isProd) {
const minified = (banner || '') + terser.minify(code, {
toplevel: true,
output: {
ascii_only: true
},
compress: {
pure_funcs: ['makeMap']
}
}).code
return write(file, minified, true)
} else {
return write(file, code)
}
} catch (err) {
throw new Error(err)
}
}
function write(dest, code, zip) {
return new Promise((resolve, reject) => {
function report(extra) {
console.log(blue(path.relative(process.cwd(), dest)) + ' ' + getSize(code) + (extra || ''))
resolve()
}
fs.writeFile(dest, code, err => {
if (err) return reject(err)
if (zip) {
zlib.gzip(code, (err, zipped) => {
if (err) return reject(err)
report(` (gzipped: ${getSize(zipped)})`)
})
} else {
report()
}
})
})
}
function getSize(code) {
return (code.length / 1024).toFixed(2) + 'kb'
}
function logError(e) {
console.error(e)
}
function blue(str) {
return `\x1b[1m\x1b[34m${str}\x1b[39m\x1b[22m`
}