fs = require 'fs' {spawn, exec} = require 'child_process' closureCompile = (mode, srcPath, destPath, callback = (->)) -> modeArgs = { pretty: ['--compilation_level', 'WHITESPACE_ONLY', '--formatting', 'PRETTY_PRINT'], simple: ['--compilation_level', 'SIMPLE_OPTIMIZATIONS'], advanced: ['--compilation_level', 'ADVANCED_OPTIMIZATIONS'], }[mode] args = [ '/usr/bin/env', 'java', '-jar', process.env['CLOSURE_JAR'] ] for x in modeArgs args.push x args.push '--create_source_map', "#{destPath}.mapping" exec "cat #{srcPath} | /usr/bin/env #{args.join(' ')} > #{destPath}", (e, out, err) -> if e console.log out console.log err callback() task 'build', () -> # foo.js exec "coffee -c .", () -> # Got cores? closureCompile 'pretty', 'foo.js', 'foo.pretty.js' closureCompile 'simple', 'foo.js', 'foo.simple.js', () -> closureCompile 'pretty', 'foo.simple.js', 'foo.simple.pretty.js' closureCompile 'advanced', 'foo.js', 'foo.advanced.js', () -> closureCompile 'pretty', 'foo.advanced.js', 'foo.advanced.pretty.js'