1

我正在使用以下行使用 yuicompressor 创建 js 的压缩版本:

java -jar /home2/java/yuicompressor-2.4.2.jar --type js /home/site/libs/javascript/photos_functions.js >/home/site/libs/javascript/photos_functions-min.js

但由于某种原因,yui 似乎错误地将分号 (;) 放在了整个地方。我才开始注意到它。它似乎是在使用 jquery ajax 函数 $ajax({}); 之后发生的。

它似乎做的是删除分号,然后将其添加到下一个 } (奇怪)。

其他人看到这个或没有办法/选项来解决它?

之前的例子:

function photo_load_vs_breakdown(photo_id,page) {

    display_white_box('photo_vs_box');

    url =  SITEURL + "/libs/ajax/vs_mode_breakdown.php";
    params = 'photo_id='+photo_id+'&page='+page;



    $.ajax({ 
        url: url,
        cache:false, 
        type: 'POST',
        data: params,
        dataType: 'json',
        success: function(data) {

            if(page == 0){
                $('#photo_vs_box_contents').html(data.content);
            }
            else{

                newpage = page + 1;
                $('#vs_mode_wins').append(data.wins_append);
                $('#vs_mode_losses').append(data.lose_append);
                $('#vs_load_more').attr('onclick','photo_load_vs_breakdown('+photo_id+','+newpage+')');
                if(data.disable_vs_load_more == 'yes'){
                    $('#vs_load_more').attr('disabled','disabled');
                }

            }

        }
    }); 
}

示例之后:

function photo_load_vs_breakdown(a,b){display_white_box("photo_vs_box");url=SITEURL+"/libs/ajax/vs_mode_breakdown.php";params="photo_id="+a+"&page="+b;$.ajax({url:url,cache:false,type:"POST",data:params,dataType:"json",success:function(c){if(b==0){$("#photo_vs_box_contents").html(c.content)}else{newpage=b+1;$("#vs_mode_wins").append(c.wins_append);$("#vs_mode_losses").append(c.lose_append);$("#vs_load_more").attr("onclick","photo_load_vs_breakdown("+a+","+newpage+")");if(c.disable_vs_load_more=="yes"){$("#vs_load_more").attr("disabled","disabled")}}}})};

注意末尾分号的位置。

4

2 回答 2

1

YUI Compressor 就像许多其他代码转换工具一样,不会通过删除或移动部分代码来真正“编辑”您的代码。实际上,它会将其编译为某种中间形式,完全删除您的所有样式和其他无意义的部分,然后根据自己的内部规则重新生成新代码。没有办法以某种方式“保留”本质上无操作的符号 - 例如空格、额外的括号、额外的分号等,因为它们根本没有保存在任何地方。

于 2012-10-12T10:53:05.577 回答
1

YUI 压缩器在这里所​​做的似乎并不是完全放错或移动分号,而是实际上在函数中的最后一个表达式之后删除分号,在代码末尾添加一个分号(以避免连接两个或多个时出现问题脚本一起)。

例如这段代码:

function x() { a(); b(); c(); }
function y() { a(); b(); c(); }

将被压缩为以下代码:

function x(){a();b();c()}function y(){a();b();c()};

请注意,两个函数中的最后一个分号都被删除了,但在第二个函数之后只添加了一个分号。

请参阅使用 YUI Compressor 进行在线 JavaScript/CSS 压缩以进行一些快速实验。还将它与UglifyJS进行比较,这是另一个用于 JavaScript 缩小的工具,在此示例中输出:

function x(){a(),b(),c()}function y(){a(),b(),c()}

有关更多选项,请参阅:UglifyJS 自述文件。(还有一个更高级的UglifyJS2正在开发中。)

于 2012-10-12T11:05:05.623 回答