Javascript 如何防止JS缩小删除命名函数表达式的名称?

Javascript 如何防止JS缩小删除命名函数表达式的名称?,javascript,minify,anonymous-function,function-expression,Javascript,Minify,Anonymous Function,Function Expression,我在一个非常需要跟踪的对象上有这个函数,还有调用的父调用方和传递给调用方的参数 这口井一直工作到缩小: var foo = { FunctionToBeLogged: function GiveMeAName() { console.log('> %s called from %s - args: %o', arguments.callee.name, arguments.callee.

我在一个非常需要跟踪的对象上有这个函数,还有调用的父调用方和传递给调用方的参数

这口井一直工作到缩小:

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]
我真的不想去创建函数声明和赋值,因为我有很多函数声明和赋值(我用7564继承了这段代码…我可以很容易地运行一些regex子来命名函数表达式)


我该怎么做才能防止minifier删除我的这些函数名?

要实现这一点,您可以传递特定的名称以避免损坏,例如在UglifyJS中:

为了避免这种情况,您可以使用--reserved file传递一个文件名,该文件名应包含要从损坏中排除的名称

在该文件中,您将有一个不希望更改的名称列表,如下所示:

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

运行未缩小的代码。。。。?不要在生产机器上开发,也不要缩小开发机器。哈哈哈。。抱歉,我忘了说:我们可以将未统一的脚本部署到开发和集成环境,但我们需要从内部QA环境和后续阶段开始部署所有缩小的JS脚本。我们需要一直跟踪这些调用直到登台。您使用什么来缩小代码?