From: Mihai Bazon Date: Fri, 4 Jan 2013 09:24:29 +0000 (+0200) Subject: Support `output`, `mangle` and `compress` options to `UglifyJS.minify`. X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=130c623be74ea010b11222d43eb23a181d36cd8a;p=UglifyJS.git Support `output`, `mangle` and `compress` options to `UglifyJS.minify`. Close #57 Close #86 Close #33 --- diff --git a/README.md b/README.md index 20676bd5..802ea1c1 100644 --- a/README.md +++ b/README.md @@ -214,6 +214,7 @@ will evaluate references to them to the value itself and drop unreachable code as usual. The possible downside of this approach is that the build will contain the `const` declarations. + ## Beautifier options The code generator tries to output shortest code possible by default. In @@ -367,9 +368,19 @@ no sense otherwise). Other options: - `warnings` (default `false`) — pass `true` to display compressor warnings. + - `fromString` (default `false`) — if you pass `true` then you can pass JavaScript source code, rather than file names. +- `mangle` — pass `false` to skip mangling names. + +- `output` (default `null`) — pass an object if you wish to specify + additional [output options][codegen]. The defaults are optimized + for best compression. + +- `compress` (default `{}`) — pass `false` to skip compressing entirely. + Pass an object to specify custom [compressor options][compressor]. + We could add more options to `UglifyJS.minify` — if you need additional functionality please suggest! @@ -517,3 +528,5 @@ The `source_map_options` (optional) can contain the following properties: [acorn]: https://github.com/marijnh/acorn [source-map]: https://github.com/mozilla/source-map [sm-spec]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit + [codegen]: http://lisperator.net/uglifyjs/codegen + [compressor]: http://lisperator.net/uglifyjs/compress diff --git a/tools/node.js b/tools/node.js index be3cd93d..cf87628d 100644 --- a/tools/node.js +++ b/tools/node.js @@ -56,6 +56,9 @@ exports.minify = function(files, options) { inSourceMap : null, fromString : false, warnings : false, + mangle : {}, + output : null, + compress : {} }); if (typeof files == "string") files = [ files ]; @@ -73,16 +76,20 @@ exports.minify = function(files, options) { }); // 2. compress - toplevel.figure_out_scope(); - var sq = UglifyJS.Compressor({ - warnings: options.warnings, - }); - toplevel = toplevel.transform(sq); + if (options.compress) { + var compress = { warnings: options.warnings }; + UglifyJS.merge(compress, options.compress); + toplevel.figure_out_scope(); + var sq = UglifyJS.Compressor(compress); + toplevel = toplevel.transform(sq); + } // 3. mangle - toplevel.figure_out_scope(); - toplevel.compute_char_frequency(); - toplevel.mangle_names(); + if (options.mangle) { + toplevel.figure_out_scope(); + toplevel.compute_char_frequency(); + toplevel.mangle_names(options.mangle); + } // 4. output var map = null; @@ -95,7 +102,11 @@ exports.minify = function(files, options) { orig: inMap, root: options.sourceRoot }); - var stream = UglifyJS.OutputStream({ source_map: map }); + var output = { source_map: map }; + if (options.output) { + UglifyJS.merge(output, options.output); + } + var stream = UglifyJS.OutputStream(output); toplevel.print(stream); return { code : stream + "",