0

我有一个对象,我需要跟踪REALLY BADLY,以及传递给调用者的调用和参数的父调用方。如何防止JS缩小删除命名函数表达式的名称?

这口井工程直至精缩:

var foo = { 
    FunctionToBeLogged: function GiveMeAName() { 
     console.log('> %s called from %s - args: %o', 
        arguments.callee.name, 
        arguments.callee.caller.name, 
        arguments.callee.caller.arguments); 
    } 
} 

var bar = { 
    A: function A(something) { 
    foo.FunctionToBeLogged('nothing', 12, true); 
    }, 
    B: function B(whatever, doesntMatter) { 
    foo.FunctionToBeLogged('nothing', 12, true); 
    } 
} 

bar.A(1.2, 'Fred', { }); // > GiveMeAName called from A - args: [1.2, "Fred", Object] 
bar.B('Barney', 42, false); // > GiveMeAName called from B - args: ["Barney", 42, false] 

缩小摆脱了这些名字和我的输出变为:

bar.A(1.2, 'Fred', { }); // > called from - args: [1.2, "Fred", Object] 
bar.B('Barney', 42, false); // > called from - args: ["Barney", 42, false] 

我真的不想去创建函数声明和分配,因为我有他们的吨(我继承这个代码与7,564 ...我可以很容易地运行一些正则表达式命名函数表达式。)

我能做些什么来防止缩小器摆脱我的这些函数名称?

+0

运行代码un-minified ....?不要在生产机器上开发,也不要在开发机器上进行缩小。 – Ryan

+0

哈哈哈......对不起,我忘了说:我们可以将未经过粉刷的脚本部署到开发和集成环境,但是我们需要部署从我们的内部QA环境和后续阶段开始缩小的所有JS脚本。我们需要继续跟踪这些呼叫到分段。 – fernandoespinosa

+0

你用什么来缩小代码? – JordanHendrix

回答

1

要做到这一点,你可以通过特定的名称不能错位,例如在UglifyJS:

为了避免这种情况,你可以使用--reserved文件传递应包含名称的文件名从重整

在该文件中,你将有你不想要的名单中排除改变,像这样:

{ 
    "vars": [ "define", "require", ... ], 
    "props": [ "length", "prototype", ... ] 
} 

Uglify Mangle options docs...

相关问题