Support multiple --reserved-file args

This commit is contained in:
Mihai Bazon
2015-03-18 11:53:17 +02:00
parent 540c19792f
commit 3ef092332b
2 changed files with 31 additions and 13 deletions

View File

@@ -94,8 +94,8 @@ You need to pass an argument to this option to specify the name that your module
.string("comments")
.string("wrap")
.string("p")
.string("reserved-file")
.string("name-cache")
.array("reserved-file")
.boolean("expr")
.boolean("source-map-include-sources")
@@ -150,6 +150,11 @@ if (ARGS.acorn) {
var COMPRESS = getOptions("c", true);
var MANGLE = getOptions("m", true);
var BEAUTIFY = getOptions("b", true);
var RESERVED = null;
if (ARGS.reserved_file) ARGS.reserved_file.forEach(function(filename){
RESERVED = UglifyJS.readReservedFile(filename, RESERVED);
});
if (ARGS.d) {
if (COMPRESS) COMPRESS.global_defs = getOptions("d");
@@ -159,16 +164,10 @@ if (ARGS.r) {
if (MANGLE) MANGLE.except = ARGS.r.replace(/^\s+|\s+$/g).split(/\s*,+\s*/);
}
var RESERVED = null;
if (ARGS.reserved_file) (function(){
var data = fs.readFileSync(ARGS.reserved_file, "utf8");
RESERVED = data = JSON.parse(data);
if (data.vars) {
MANGLE.except = MANGLE.except
? MANGLE.except.concat(data.vars)
: data.vars;
}
})();
if (RESERVED && MANGLE) {
if (!MANGLE.except) MANGLE.except = RESERVED.vars;
else MANGLE.except = MANGLE.except.concat(RESERVED.vars);
}
function readNameCache(key) {
return UglifyJS.readNameCache(ARGS.name_cache, key);
@@ -457,9 +456,9 @@ function normalize(o) {
function getOptions(x, constants) {
x = ARGS[x];
if (!x) return null;
if (x == null) return null;
var ret = {};
if (x !== true) {
if (x !== "") {
var ast;
try {
ast = UglifyJS.parse(x, { expression: true });

View File

@@ -194,6 +194,25 @@ exports.describe_ast = function() {
return out + "";
};
exports.readReservedFile = function(filename, reserved) {
if (!reserved) {
reserved = { vars: [], props: [] };
}
var data = fs.readFileSync(filename, "utf8");
data = JSON.parse(data);
if (data.vars) {
data.vars.forEach(function(name){
UglifyJS.push_uniq(reserved.vars, name);
});
}
if (data.props) {
data.props.forEach(function(name){
UglifyJS.push_uniq(reserved.props, name);
});
}
return reserved;
};
exports.readNameCache = function(filename, key) {
var cache = null;
if (filename) {