Microsoft Ajax Minifier重命名我的函数名称

时间:2012-06-29 14:56:23

标签: javascript jquery-plugins microsoft-ajax-minifier

我正在使用jQuery插件并通过Microsoft Ajax Minifier运行它。我的脚本对我很有用,但现在我遇到了这个插件的问题。问题是插件使用字符串调用函数名称:

var s = (getCachedSortType(table.config.parsers, c) == "text") ? ((order == 0) ? "sortText" : "sortTextDesc") : ((order == 0) ? "sortNumeric" : "sortNumericDesc");

注意" sortNumeric"和" sortNumericDesc"。这称为这些功能:

function sortNumeric(a, b) {
            return a - b;
        }

function sortNumericDesc(a, b) {
            return b - a;
        }

这是调用这些函数的唯一位置,因此IDE VS2010并不认为函数是从任何地方调用的......它们通过上面的代码有条件地进行。

**以下是问题**

当它被缩小时,函数的字符串名称会保留,但函数会被删除,因为它不会被引用。

有没有办法调整设置缩小器而不执行此操作?

我也看到它改变了函数的名称,所以

function testFunctionName(a,b)

会变成

function a

这也会导致像我这样的情况出现问题...... 请注意,我知道硬编码这样的功能名称是不好的代码设计。就像我说的那样,它是我正在使用的插件。我会接受一个解决方案,它会将函数调用为正确而不是字符串,但我总是对修改插件犹豫不决。

2 个答案:

答案 0 :(得分:1)

使用-unused:keep开关保留未使用的功能。这自然会阻止minifier删除真正未使用的代码。

使用-rename switch为您按名称调用的函数指定永久名称。

答案 1 :(得分:1)

来自documentation

  

-evals :( ignore | immediate | safeall)指定如何处理eval语句。这是一个需要注意的重要转变。默认情况下,Ajax Minifier将忽略任何eval语句,如果它包含引用命名局部变量或函数的eval语句,则会破坏缩小的代码。这是因为默认情况下Ajax Minifier也会重命名局部变量和函数,但它不会修改传递给eval函数的文本,因此这些引用可能会中断。如果您缩小代码并且它停止正常工作,请检查代码以获取eval语句。如果有,请尝试指定其他两个-evals开关选项之一。 “立即”选项不会重命名与任何eval调用相同范围内的任何变量或函数; “safeall”选项不会重命名任何变量或函数,不仅在与任何eval调用相同的范围内,而且还在任何父作用域中。这将严重影响代码的缩小,但应确保对eval函数的任何调用都能按预期工作。默认设置为ignoreall。

然后尝试-evals:immediate如果您的代码仍然损坏,则必须使用-evals:safeall(即使这会使您的JavaScript文件变大)。

<强>更新
如果您没有使用eval,那么您必须完全跳过功能重命名:

  

-rename :( all | localization | none)指定是否自动重命名局部变量和函数。全局变量和函数不会自动重命名,也不会重命名属性名称。如果指定了“本地化”,则只会重命名不以“L_”开头的变量。默认值为all。

只需添加-rename:none