84 lines
2.0 KiB
JavaScript
84 lines
2.0 KiB
JavaScript
#!/usr/local/bin/node
|
|
|
|
var fs = require('fs')
|
|
var path = require('path')
|
|
var browserify = require('browserify')
|
|
var UglifyJS = require('uglify-js')
|
|
var base = __dirname + '/..'
|
|
|
|
module.exports = {
|
|
run: run,
|
|
}
|
|
|
|
if (require.main === module) {
|
|
main()
|
|
}
|
|
|
|
function main() {
|
|
run(function(err) {
|
|
if (err) { throw err }
|
|
})
|
|
}
|
|
|
|
function run(callback) {
|
|
var dir = base+'/dist'
|
|
fs.readdir(dir, function(err, items) {
|
|
next()
|
|
function next() {
|
|
var item = items.shift()
|
|
if (!item) {
|
|
return callback()
|
|
}
|
|
if (item[0] == '.') {
|
|
return next()
|
|
}
|
|
if (item.match(/\.min\.js$/)) {
|
|
return next()
|
|
}
|
|
var input = path.resolve(dir+'/'+item)
|
|
var output = input.replace(/\.js$/, '.min.js')
|
|
console.log('compile', input, '->', output)
|
|
compileFile(input, output, function(err) {
|
|
if (err) {
|
|
return callback(err)
|
|
}
|
|
next()
|
|
})
|
|
}
|
|
})
|
|
}
|
|
|
|
function compileFile(input, output, callback) {
|
|
var copyright = '/* store.js - Copyright (c) 2010-2017 Marcus Westin */'
|
|
// TODO: sourcemaps - depends on https://github.com/mishoo/UglifyJS2/issues/520
|
|
browserify([input], { standalone:'store', expose:'store' }) // TODO: sourcemaps - use `debug:true`
|
|
.transform('babelify', { presets:['es2015'] }) // TODO: sourcemaps - use `sourceMaps:true`
|
|
.bundle(processResult)
|
|
|
|
function processResult(err, buf) {
|
|
if (err) { return callback(err) }
|
|
var code = buf.toString()
|
|
code = minify(code)
|
|
var result = copyright+'\n'+code
|
|
fs.writeFile(output, result, function(err) {
|
|
if (err) { return callback(err) }
|
|
var b = Buffer.byteLength(result, 'utf8')
|
|
var k = Math.round(b/1000)
|
|
console.log(k+'k \t('+b+')')
|
|
callback()
|
|
})
|
|
}
|
|
}
|
|
|
|
function minify(code) {
|
|
var minified = UglifyJS.minify(code, {
|
|
fromString: true,
|
|
compress: { screw_ie8:false },
|
|
mangle: { screw_ie8:false },
|
|
output: { screw_ie8:false },
|
|
// warnings: true,
|
|
// mangleProperties: { reserved:[] },
|
|
})
|
|
return minified.code // TODO: sourcemaps - use `result.map`.
|
|
}
|