The available options are:
- --source-map Specify an output file where to generate source map.
- [string]
- --source-map-root The path to the original source to be included in the
- source map. [string]
- --source-map-url The path to the source map to be added in //@
- sourceMappingURL. Defaults to the value passed with
- --source-map. [string]
- --in-source-map Input source map, useful if you're compressing JS that was
- generated from some other original code.
- --screw-ie8 Pass this flag if you don't care about full compliance with
- Internet Explorer 6-8 quirks (by default UglifyJS will try
- to be IE-proof).
- -p, --prefix 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.
- -o, --output Output file (default STDOUT).
- -b, --beautify Beautify output/specify output options. [string]
- -m, --mangle Mangle names/pass mangler options. [string]
- -r, --reserved Reserved names to exclude from mangling.
- -c, --compress Enable compressor/pass compressor options. Pass options
- like -c hoist_vars=false,if_return=false. Use -c with no
- argument to use the default compression options. [string]
- -d, --define Global definitions [string]
- --comments Preserve copyright comments in the output. By default this
- works like Google Closure, keeping JSDoc-style comments
- that contain "@license" or "@preserve". You can optionally
- pass one of the following arguments to this flag:
- - "all" to keep all comments
- - a valid JS regexp (needs to start with a slash) to keep
- only comments that match.
- Note that currently not *all* comments can be kept when
- compression is on, because of dead code removal or
- cascading statements into sequences. [string]
- --stats Display operations run time on STDERR. [boolean]
- --acorn Use Acorn for parsing. [boolean]
- --spidermonkey Assume input files are SpiderMonkey AST format (as JSON).
- [boolean]
- --self Build itself (UglifyJS2) as a library (implies
- --wrap=UglifyJS --export-all) [boolean]
- --wrap Embed everything in a big function, making the “exports”
- and “global” variables available. You need to pass an
- argument to this option to specify the name that your
- module will take when included in, say, a browser.
- [string]
- --export-all Only used when --wrap, this tells UglifyJS to add code to
- automatically export all globals. [boolean]
- --lint Display some scope warnings [boolean]
- -v, --verbose Verbose [boolean]
- -V, --version Print version number and exit. [boolean]
+ --source-map Specify an output file where to generate source map.
+ [string]
+ --source-map-root The path to the original source to be included in the
+ source map. [string]
+ --source-map-url The path to the source map to be added in //#
+ sourceMappingURL. Defaults to the value passed with
+ --source-map. [string]
+ --in-source-map Input source map, useful if you're compressing JS that was
+ generated from some other original code.
+ --screw-ie8 Pass this flag if you don't care about full compliance
+ with Internet Explorer 6-8 quirks (by default UglifyJS
+ will try to be IE-proof). [boolean]
+ --expr Parse a single expression, rather than a program (for
+ parsing JSON) [boolean]
+ -p, --prefix 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. You can also
+ specify -p relative, which will make UglifyJS figure out
+ itself the relative paths between original sources, the
+ source map and the output file. [string]
+ -o, --output Output file (default STDOUT).
+ -b, --beautify Beautify output/specify output options. [string]
+ -m, --mangle Mangle names/pass mangler options. [string]
+ -r, --reserved Reserved names to exclude from mangling.
+ -c, --compress Enable compressor/pass compressor options. Pass options
+ like -c hoist_vars=false,if_return=false. Use -c with no
+ argument to use the default compression options. [string]
+ -d, --define Global definitions [string]
+ -e, --enclose Embed everything in a big function, with a configurable
+ parameter/argument list. [string]
+ --comments Preserve copyright comments in the output. By default this
+ works like Google Closure, keeping JSDoc-style comments
+ that contain "@license" or "@preserve". You can optionally
+ pass one of the following arguments to this flag:
+ - "all" to keep all comments
+ - a valid JS regexp (needs to start with a slash) to keep
+ only comments that match.
+ Note that currently not *all* comments can be kept when
+ compression is on, because of dead code removal or
+ cascading statements into sequences. [string]
+ --stats Display operations run time on STDERR. [boolean]
+ --acorn Use Acorn for parsing. [boolean]
+ --spidermonkey Assume input files are SpiderMonkey AST format (as JSON).
+ [boolean]
+ --self Build itself (UglifyJS2) as a library (implies
+ --wrap=UglifyJS --export-all) [boolean]
+ --wrap Embed everything in a big function, making the “exports”
+ and “global” variables available. You need to pass an
+ argument to this option to specify the name that your
+ module will take when included in, say, a browser.
+ [string]
+ --export-all Only used when --wrap, this tells UglifyJS to add code to
+ automatically export all globals. [boolean]
+ --lint Display some scope warnings [boolean]
+ -v, --verbose Verbose [boolean]
+ -V, --version Print version number and exit. [boolean]
Specify `--output` (`-o`) to declare the output file. Otherwise the output
goes to STDOUT.
var sys = require("util");
var optimist = require("optimist");
var fs = require("fs");
+var path = require("path");
var async = require("async");
var acorn;
var ARGS = optimist
.describe("screw-ie8", "Pass this flag if you don't care about full compliance with Internet Explorer 6-8 quirks (by default UglifyJS will try to be IE-proof).")
.describe("expr", "Parse a single expression, rather than a program (for parsing JSON)")
.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.")
+For example -p 3 will drop 3 directories from file names and ensure they are relative paths. \
+You can also specify -p relative, which will make UglifyJS figure out itself the relative paths between original sources, \
+the source map and the output file.")
.describe("o", "Output file (default STDOUT).")
.describe("b", "Beautify output/specify output options.")
.describe("m", "Mangle names/pass mangler options.")
.string("e")
.string("comments")
.string("wrap")
+ .string("p")
.boolean("expr")
.boolean("screw-ie8")
var STATS = {};
var OUTPUT_FILE = ARGS.o;
var TOPLEVEL = null;
+var P_RELATIVE = ARGS.p && ARGS.p == "relative";
var SOURCE_MAP = ARGS.source_map ? UglifyJS.SourceMap({
- file: OUTPUT_FILE,
+ file: P_RELATIVE ? path.relative(path.dirname(ARGS.source_map), OUTPUT_FILE) : OUTPUT_FILE,
root: ARGS.source_map_root,
orig: ORIG_MAP,
}) : null;
process.exit(1);
}
if (ARGS.p != null) {
- file = file.replace(/^\/+/, "").split(/\/+/).slice(ARGS.p).join("/");
+ if (P_RELATIVE) {
+ file = path.relative(path.dirname(ARGS.source_map), file);
+ } else {
+ var p = parseInt(ARGS.p, 10);
+ if (!isNaN(p)) {
+ file = file.replace(/^\/+/, "").split(/\/+/).slice(ARGS.p).join("/");
+ }
+ }
}
time_it("parse", function(){
if (ARGS.spidermonkey) {
if (SOURCE_MAP) {
fs.writeFileSync(ARGS.source_map, SOURCE_MAP, "utf8");
- output += "\n//# sourceMappingURL=" + (ARGS.source_map_url || ARGS.source_map);
+ var source_map_url = ARGS.source_map_url || (
+ P_RELATIVE
+ ? path.relative(path.dirname(OUTPUT_FILE), ARGS.source_map)
+ : ARGS.source_map
+ );
+ output += "\n//# sourceMappingURL=" + source_map_url;
}
if (OUTPUT_FILE) {