Files
soulspace/node_modules/store/scripts/compile-builds.js
2025-03-05 15:16:45 +08:00

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`.
}