#!/usr/bin/env python # Copyright 2016 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. ''' Javascript minifier using the closure compiler This minifier strips spaces and comments out of Javascript using the closure compiler. It takes the original Javascript on standard input, and outputs the minified output on standard output. Any errors or other messages from the compiler are output on standard error. ''' import argparse import sys import tempfile from compile2 import Checker def Minify(source): parser = argparse.ArgumentParser() parser.add_argument("-c", "--closure_args", nargs=argparse.ZERO_OR_MORE, help="Arguments passed directly to the Closure compiler") args = parser.parse_args() with tempfile.NamedTemporaryFile(suffix='.js') as t1, \ tempfile.NamedTemporaryFile(suffix='.js') as t2: t1.write(source) t1.seek(0) checker = Checker() (compile_error, compile_stderr) = checker.check( [t1.name], out_file=t2.name, closure_args=args.closure_args) if compile_error: print compile_stderr t2.seek(0) result = t2.read() return result if __name__ == '__main__': orig_stdout = sys.stdout result = '' try: sys.stdout = sys.stderr result = Minify(sys.stdin.read()) finally: sys.stdout = orig_stdout print result