Javascript minifier删除功能

时间:2015-03-31 17:36:01

标签: javascript web-essentials

我有一个JS文件,我试图缩小,但它有一些麻烦。这是文件:

$(document).ready(function () {
function DisplayMessage(message, iserror) {
    var htmlclass = iserror ? "error" : "success";

    $('div.response-message').empty()
        .append(message)
        .addClass(htmlclass);

    $('div.response-message').animate({
        top: "-1px"
    }, 1000, function () {
        alert("donee");
    });
}

$('.account-overlay-link > a.link').click(function (e) {
    e.preventDefault();
    $('.account-overlay.background').removeClass("hide");
});

$('.account-overlay > .area > .close').click(function (e) {
    e.preventDefault();
    $('.account-overlay.background').addClass("hide");
});
});

正如你所看到的,我在顶部有一个常规的javascript函数,下面有两个jQuery事件处理程序。当我将文件保存为minify时,缩小的文件包含两个jQuery处理程序,但函数无处可见。

奇怪的是,如果我删除了两个jQuery块但保留了该函数,文件仍然会缩小,但它是空白的(除了(document).ready),好像该函数不存在一样。

我尝试重新创建文件,重新启动Visual Studios,但没有任何工作......

2 个答案:

答案 0 :(得分:4)

“ready”处理函数中的任何代码都不会调用您的函数,因此它将作为死代码被删除。无论如何,处理程序之外的任何东西都无法调用它。

如果您希望函数成为全局可见的符号,则必须将其显式分配给window对象的属性:

$(document).ready(function () {
function DisplayMessage(message, iserror) {
    var htmlclass = iserror ? "error" : "success";

    $('div.response-message').empty()
        .append(message)
        .addClass(htmlclass);

    $('div.response-message').animate({
        top: "-1px"
    }, 1000, function () {
        alert("donee");
    });
}
window.DisplayMessage = DisplayMessage;

如果你这样做,缩小器不会删除它。

答案 1 :(得分:0)

要记住的另一件事是,一些缩小器不能处理“特殊”关键字......

如果您的代码包含“花哨”的内容,请考虑检查您的代码,例如

  • 让,const
  • 特殊循环,例如 for(var a of myData)
  • 特殊检查,例如if(myObject中的“MyProperty”)

至少在我的情况下,这是真正的问题