如何防止 JS 缩小删除命名函数表达式的名称
How to prevent JS minification from removing names of named-function-expressions?
我在一个对象上有这个函数,我需要非常糟糕地跟踪它,以及调用的父调用者和传递给调用者的参数。
这很好,直到缩小:
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 继承了这段代码......我可以轻松地运行一些正则表达式来命名函数表达式。
我该怎么做才能防止缩小器删除我的这些函数名称?
为了实现这一点,你可以传递特定的名称,以免被破坏,例如在UglifyJS中:
为了避免这种情况,您可以使用 --reserved-file 来传递一个文件名,该文件名应包含要从重整中排除的名称
在该文件中,您将有一个您不想更改的名称列表,如下所示:
{
"vars": [ "define", "require", ... ],
"props": [ "length", "prototype", ... ]
}
Uglify Mangle选项文档...
相关文章:
- 能够在定义函数表达式之前使用它
- 函数表达式,返回回调函数
- JavaScript中的立即调用函数表达式(IIFE)-传递jQuery
- 函数声明与函数表达式之间的性能差异
- 立即调用函数表达式(IIFE)相对于普通函数的优势
- 如何防止 JS 缩小删除命名函数表达式的名称
- Angularjs 与 coffeescript 函数表达式中断
- JavaScript 混乱中的函数表达式
- 从ES6中的函数表达式访问类作用域
- 提升作为数组项的匿名函数表达式
- Javascript Mocha测试-测试函数表达式中的函数表达式
- 函数中的JavaScript函数表达式
- Javascript闭包覆盖函数表达式
- 函数表达式的词法作用域
- 请解释一下“;立即调用函数表达式“;以及“;自调用匿名函数”;
- JavaScript 中的函数语句和函数表达式
- ng-class 的函数表达式在 ng-click 时被调用
- 如何创建名称和主体存储在不同变量中的 JavaScript 函数表达式
- Object.Prototype 方法和 IIFE(立即调用的函数表达式)中的“use strict”
- 全局范围内的函数表达式与函数声明的区别