|
@@ -0,0 +1,81 @@
|
|
|
+const fs = require('fs')
|
|
|
+const path = require('path')
|
|
|
+const zlib = require('zlib')
|
|
|
+const uglify = require('uglify-js')
|
|
|
+const rollup = require('rollup')
|
|
|
+const configs = require('./configs')
|
|
|
+
|
|
|
+if (!fs.existsSync('dist')) {
|
|
|
+ fs.mkdirSync('dist')
|
|
|
+}
|
|
|
+
|
|
|
+build(Object.keys(configs).map(key => configs[key]))
|
|
|
+
|
|
|
+function build (builds) {
|
|
|
+ let built = 0
|
|
|
+ const total = builds.length
|
|
|
+ const next = () => {
|
|
|
+ buildEntry(builds[built]).then(() => {
|
|
|
+ built++
|
|
|
+ if (built < total) {
|
|
|
+ next()
|
|
|
+ }
|
|
|
+ }).catch(logError)
|
|
|
+ }
|
|
|
+
|
|
|
+ next()
|
|
|
+}
|
|
|
+
|
|
|
+function buildEntry (config) {
|
|
|
+ const isProd = /min\.js$/.test(config.dest)
|
|
|
+ return rollup.rollup(config).then(bundle => {
|
|
|
+ const code = bundle.generate(config).code
|
|
|
+ if (isProd) {
|
|
|
+ var minified = (config.banner ? config.banner + '\n' : '') + uglify.minify(code, {
|
|
|
+ fromString: true,
|
|
|
+ output: {
|
|
|
+ /* eslint-disable camelcase */
|
|
|
+ screw_ie8: true,
|
|
|
+ ascii_only: true
|
|
|
+ /* eslint-enable camelcase */
|
|
|
+ }
|
|
|
+ }).code
|
|
|
+ return write(config.dest, minified, true)
|
|
|
+ } else {
|
|
|
+ return write(config.dest, code)
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+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.log(e)
|
|
|
+}
|
|
|
+
|
|
|
+function blue (str) {
|
|
|
+ return '\x1b[1m\x1b[34m' + str + '\x1b[39m\x1b[22m'
|
|
|
+}
|