MicrosoftAjaxMinifier似乎无法删除无法访问的代码"

时间:2014-06-25 11:55:03

标签: asp.net-mvc-4 minify microsoft-ajax-minifier bundletransformer

我正在使用来自nuget的BundleTransformer和ASP.Net应用中的System.Web.Optimisation。根据各种文档,minifier应该“删除无法访问的代码”。我知道它不像google关闭那样具有攻击性(我目前无法使用)但是我无法让最简单的情况起作用,例如;

function foo() {
}

其中foo未从任何地方调用。我可以理解这可能是一个导出函数的论点,但我看不出区分它的方法。我的所有JS代码都是连接起来的,所以如果能找到合适的开关,它就能确定是否需要该功能。

我发现省略不必要代码的唯一方法是使用web {.config中的debugLookupList属性BundleTransformer,但这似乎是一个破解坚果的大锤。它不是很精细。

有没有人有一个如何编写这个缩小器识别出来的所谓“无法访问的代码”的例子?

这是test online

的地方

1 个答案:

答案 0 :(得分:2)

我怀疑 minifier 是否有任何方法可以知道是否可以安全地删除全局定义的函数(因为它不知道完整的范围)。另一方面,它可能不会删除任何未使用的函数,并且可能只对无法访问的代码感兴趣(即return之后的代码。)

使用JavaScript模块模式,您未使用的私有函数很可能会被正确地保存(虽然我没有对此进行测试)。在下面的示例中, minifier 应该对删除名为privateFunction的函数充满信心。是否将未使用的功能视为无法访问的代码是另一回事。

var AmazingModule = (function() {
    var module = {};

    function privateFunction() {
        // ..
    }

    module.otherFunction = function() {
        // ..
    };

    return module;
}());

function anotherFunction() {
    // ..
}