diff options
author | Mihai Bazon <mihai@bazon.net> | 2012-10-02 11:00:47 +0300 |
---|---|---|
committer | Mihai Bazon <mihai@bazon.net> | 2012-10-02 11:22:38 +0300 |
commit | 9e5dd81f1e98b5c77084e19345191d630576cc44 (patch) | |
tree | 73ea24334ac93a13911247a52a42ce3709040f80 /bin/uglifyjs2 | |
parent | 896444482a4044c21b68a1eb58cfe8639b628279 (diff) | |
download | tracifyjs-9e5dd81f1e98b5c77084e19345191d630576cc44.tar.gz tracifyjs-9e5dd81f1e98b5c77084e19345191d630576cc44.zip |
a shy attempt to obey `width` in the beautifier; added `bracketize` option to always print brackets around if/do/while/for statements; export more options via the CLI
Diffstat (limited to 'bin/uglifyjs2')
-rwxr-xr-x | bin/uglifyjs2 | 84 |
1 files changed, 54 insertions, 30 deletions
diff --git a/bin/uglifyjs2 b/bin/uglifyjs2 index daf17573..dd8a758a 100755 --- a/bin/uglifyjs2 +++ b/bin/uglifyjs2 @@ -7,35 +7,35 @@ var optimist = require("optimist"); var fs = require("fs"); var ARGS = optimist .usage("$0 [options] input1.js [input2.js ...]\n\ -Maximum compression settings are on by default.\n\ Use a single dash to read input from the standard input.\ ") .describe("source-map", "Specify an output file where to generate source map.") .describe("source-map-root", "The path to the original source to be included in the source map.") .describe("in-source-map", "Input source map, useful if you're compressing JS that was generated from some other original code.") - .describe("p", "Skip prefix for original filenames that appear in source maps. For example -p 3 will drop 3 directories from file names and ensure they are relative paths.") - .describe("o", "Output file (default STDOUT)") - .describe("b", "Beautify output") - .describe("m", "Don't mangle names") - .describe("c", "Disable compressor, or pass compressor options. \ + .describe("p", "Skip prefix for original filenames that appear in source maps. \ +For example -p 3 will drop 3 directories from file names and ensure they are relative paths.") + .describe("o", "Output file (default STDOUT).") + .describe("b", "Beautify output/specify output options.") + .describe("m", "Mangle names/pass mangler options.") + .describe("c", "Enable compressor/pass compressor options. \ Pass options like -c hoist_vars=false,if_return=false. \ -Use -c with no argument if you want to disable the squeezer entirely") +Use -c with no argument if you want to disable the squeezer entirely.") - .describe("stats", "Display operations run time on STDERR") + .describe("stats", "Display operations run time on STDERR.") .describe("v", "Verbose") .alias("p", "prefix") .alias("o", "output") .alias("v", "verbose") .alias("b", "beautify") - .alias("c", "options") - .alias("m", "no-mangle") + .alias("m", "mangle") + .alias("c", "compress") - .boolean("b") + .string("b") + .string("m") + .string("c") .boolean("v") .boolean("stats") - .boolean("m") - .string("c") .wrap(80) @@ -45,6 +45,7 @@ Use -c with no argument if you want to disable the squeezer entirely") function normalize(o) { for (var i in o) if (o.hasOwnProperty(i) && /-/.test(i)) { o[i.replace(/-/g, "_")] = o[i]; + delete o[i]; } } @@ -55,15 +56,30 @@ if (ARGS.h || ARGS.help) { process.exit(0); } -var COMPRESSOR_OPTIONS = {}; -if (ARGS.c && ARGS.c !== true) { - ARGS.c.replace(/^\s+|\s+$/g).split(/\s*,+\s*/).forEach(function(opt){ - var a = opt.split(/\s*=\s*/); - COMPRESSOR_OPTIONS[a[0]] = new Function("return(" + a[1] + ")")(); - }); - normalize(COMPRESSOR_OPTIONS); +function getOptions(x) { + x = ARGS[x]; + if (!x) return null; + var ret = {}; + if (x !== true) { + x.replace(/^\s+|\s+$/g).split(/\s*,+\s*/).forEach(function(opt){ + var a = opt.split(/\s*[=:]\s*/); + ret[a[0]] = a.length > 1 ? new Function("return(" + a[1] + ")")() : true; + }); + normalize(ret) + } + return ret; } +var COMPRESS = getOptions("c"); +var MANGLE = getOptions("m"); +var BEAUTIFY = getOptions("b"); + +var OUTPUT_OPTIONS = { + beautify: BEAUTIFY ? true : false +}; +if (BEAUTIFY) + UglifyJS.merge(OUTPUT_OPTIONS, BEAUTIFY); + var files = ARGS._.slice(); var ORIG_MAP = ARGS.in_source_map; @@ -103,10 +119,19 @@ var SOURCE_MAP = ARGS.source_map ? UglifyJS.SourceMap({ orig: ORIG_MAP, }) : null; -var output = UglifyJS.OutputStream({ - beautify: ARGS.b, - source_map: SOURCE_MAP -}); +OUTPUT_OPTIONS.source_map = SOURCE_MAP; + +try { + var output = UglifyJS.OutputStream(OUTPUT_OPTIONS); + var compressor = COMPRESS && UglifyJS.Compressor(COMPRESS); +} catch(ex) { + if (ex instanceof UglifyJS.DefaultsError) { + sys.error(ex.msg); + sys.error("Supported options:"); + sys.error(sys.inspect(ex.defs)); + process.exit(1); + } +} files.forEach(function(file) { var code = read_whole_file(file); @@ -121,7 +146,7 @@ files.forEach(function(file) { }); }); -var SCOPE_IS_NEEDED = ARGS.c !== true || !ARGS.m; +var SCOPE_IS_NEEDED = COMPRESS || MANGLE; if (SCOPE_IS_NEEDED) { time_it("scope", function(){ @@ -129,9 +154,8 @@ if (SCOPE_IS_NEEDED) { }); } -if (ARGS.c !== true) { +if (COMPRESS) { time_it("squeeze", function(){ - var compressor = UglifyJS.Compressor(COMPRESSOR_OPTIONS); TOPLEVEL = TOPLEVEL.transform(compressor); }); } @@ -139,15 +163,15 @@ if (ARGS.c !== true) { if (SCOPE_IS_NEEDED) { time_it("scope", function(){ TOPLEVEL.figure_out_scope(); - if (!ARGS.m) { + if (MANGLE) { TOPLEVEL.compute_char_frequency(); UglifyJS.base54.sort(); } }); } -if (!ARGS.m) time_it("mangle", function(){ - TOPLEVEL.mangle_names(); +if (MANGLE) time_it("mangle", function(){ + TOPLEVEL.mangle_names(MANGLE); }); time_it("generate", function(){ TOPLEVEL.print(output); |