mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-25 00:28:31 -05:00
61 lines
1.6 KiB
CoffeeScript
61 lines
1.6 KiB
CoffeeScript
path = require 'path'
|
|
fs = require 'fs-extra'
|
|
_ = require 'lodash'
|
|
async = require 'async'
|
|
cores = require('os').cpus().length
|
|
child_process = require 'child_process'
|
|
|
|
root = path.join(__dirname, '..', 'public','javascripts');
|
|
dest = path.join(__dirname, '..', 'public','javascripts-min');
|
|
|
|
console.log root
|
|
dirStack = [path.join(root)]
|
|
files = []
|
|
|
|
while dirStack.length
|
|
dir = dirStack.pop()
|
|
contents = fs.readdirSync(dir)
|
|
for file in contents
|
|
fullPath = "#{dir}/#{file}"
|
|
stat = fs.statSync(fullPath)
|
|
if stat.isDirectory()
|
|
dirStack.push(fullPath)
|
|
else if /\.js$/.test(file)
|
|
files.push fullPath.replace root + '/', ''
|
|
|
|
|
|
jobs = _.map files, (file) ->
|
|
(cb2) ->
|
|
fpath = path.join(root, file)
|
|
dpath = path.join(dest, file)
|
|
smArgs = []
|
|
|
|
if fs.existsSync fpath + '.map'
|
|
smArgs = [
|
|
'--in-source-map', fpath + '.map',
|
|
'--source-map', dpath + '.map',
|
|
'--source-map-include-sources',
|
|
'--source-map-url', '/javascripts/' + file.replace('/\\/g', '/') + '.map'
|
|
]
|
|
|
|
args = [fpath, '-m', '-r', 'require' , '-b', 'beautify=false,semicolons=false'].concat smArgs, ['-o', dpath]
|
|
async.waterfall [
|
|
_.bind(fs.mkdirs, fs, path.dirname dpath),
|
|
(last, cb) ->
|
|
child = child_process.spawn 'uglifyjs', args, stdio:'inherit'
|
|
child.on 'close', (code) ->
|
|
if code == 0 then cb null
|
|
else cb code
|
|
child.on 'error', (err) ->
|
|
cb err
|
|
], cb2
|
|
|
|
async.parallelLimit jobs, cores, (err, res)->
|
|
if err
|
|
console.log "ERROR:", err
|
|
else
|
|
console.log "Done, minified " + jobs.length + " files."
|
|
fs.renameSync(root, root + "-old")
|
|
fs.renameSync(dest, root)
|
|
fs.removeSync(root + "-old")
|
|
|