【问题标题】:Uglify unable to work for nested if-elseUglify 无法为嵌套的 if-else 工作
【发布时间】:2016-06-23 08:44:41
【问题描述】:

我正在使用 this online tool 对我的代码进行 uglify,尽管我使用 grunt-uglify 来执行相同但同样的错误,它可以很好地缩小代码但是当我评估此代码时它返回一个错误的expected :。因为它不适用于嵌套的 if-else 案例。

示例代码。

$._ext_ILST = {
    changeColorLabel: function() {
        spots = app.documents[0].spots;
        var colorLabelArray = new Array();
        for (var i = 0; i < spots.length; i++) {
            try {
                if (spots[i].toString() !== "[Spot]") {
                    if (spots[i].name.indexOf('$') == 0) {
                        colorLabelArray.push(spots[i].name.substring(1, spots[i].name.length));
                    }
                }
            } catch (e) {}
        }

        var colorInfo = getColorInfromation();
        var obj = {}
        if (colorInfo.length > 0)
            colorLabelArray = [];
        for (var i = 0; i < colorInfo.length; i++) {
            colorLabelArray.push(colorInfo[i].colorName);
            if ((colorInfo[i].hasOwnProperty('colorType') && colorInfo[i].colorType != "teamColorVariable")) {
                if (colorInfo[i].isGarmentColor) {
                    obj[colorInfo[i].colorName] = "G"
                } else {
                    obj[colorInfo[i].colorName] = "D"
                }
            } else if (!colorInfo[i].hasOwnProperty('colorType')) {
                if (colorInfo[i].isGarmentColor) {
                    obj[colorInfo[i].colorName] = "G"
                } else {
                    obj[colorInfo[i].colorName] = "D"
                }
            }
        }
        var mainColorObj = {
            colorLabelArray: colorLabelArray,
            colorMapArray: obj
        }
        return JSON.stringify(mainColorObj);
    }
}

缩小输出 -

$._ext_ILST = {
    changeColorLabel: function() {
        spots = app.documents[0].spots;
        for (var a = new Array, b = 0; b < spots.length; b++) try {
            "[Spot]" !== spots[b].toString() && 0 == spots[b].name.indexOf("$") && a.push(spots[b].name.substring(1, spots[b].name.length))
        } catch (c) {}
        var d = getColorInfromation(),
            e = {};
        d.length > 0 && (a = []);
        for (var b = 0; b < d.length; b++) a.push(d[b].colorName), d[b].hasOwnProperty("colorType") && "teamColorVariable" != d[b].colorType ? d[b].isGarmentColor ? e[d[b].colorName] = "G" : e[d[b].colorName] = "D" : d[b].hasOwnProperty("colorType") || (d[b].isGarmentColor ? e[d[b].colorName] = "G" : e[d[b].colorName] = "D");
        var f = {
            colorLabelArray: a,
            colorMapArray: e
        };
        return JSON.stringify(f)
    }
};

任何帮助将不胜感激。

谢谢, 乌彭德拉森加

【问题讨论】:

    标签: javascript gruntjs uglifyjs grunt-contrib-uglify


    【解决方案1】:

    你应该lint your JS first

    这是您的代码的 lint 后(稍作修改)版本:

    /* globals app, $, getColorInfromation */
    
    (function(app, $, JSON, undefined) {
        $._ext_ILST = {
            changeColorLabel: function() {
                var spots = app.documents[0].spots;
                var colorLabelArray = [];
                var i;
                for (i = 0; i < spots.length; i++) {
                    try {
                        if (spots[i].toString() !== "[Spot]") {
                            if (spots[i].name.indexOf('$') === 0) {
                                colorLabelArray.push(spots[i].name.substring(1, spots[i].name.length));
                            }
                        }
                    } catch (e) {}
                }
    
                var colorInfo = getColorInfromation();
                var obj = {};
                if (colorInfo.length > 0)
                    colorLabelArray = [];
                for (i = 0; i < colorInfo.length; i++) {
                    colorLabelArray.push(colorInfo[i].colorName);
                    if ((colorInfo[i].hasOwnProperty('colorType') && colorInfo[i].colorType != "teamColorVariable")) {
                        if (colorInfo[i].isGarmentColor) {
                            obj[colorInfo[i].colorName] = "G";
                        } else {
                            obj[colorInfo[i].colorName] = "D";
                        }
                    } else if (!colorInfo[i].hasOwnProperty('colorType')) {
                        if (colorInfo[i].isGarmentColor) {
                            obj[colorInfo[i].colorName] = "G";
                        } else {
                            obj[colorInfo[i].colorName] = "D";
                        }
                    }
                }
                var mainColorObj = {
                    colorLabelArray: colorLabelArray,
                    colorMapArray: obj
                };
                return JSON.stringify(mainColorObj);
            }
        };
    }(app, $, JSON));
    

    注意我wrapped your code in an IIFE给你更好的丑化结果。另请注意,我只对您的代码进行了局部扫描……我认为您可以做更多的事情来使它更好(例如,if 语句周围的括号,我个人喜欢明确地hoist all my vars 等)。

    接下来,我快速搜索了online minification/uglification tool 并复制/粘贴了代码的 linted 版本;结果如下:

    !function(o,r,e,a){r._ext_ILST={changeColorLabel:function(){var r,a=o.documents[0].spots,n=[];for(r=0;r<a.length;r++)try{"[Spot]"!==a[r].toString()&&0===a[r].name.indexOf("$")&&n.push(a[r].name.substring(1,a[r].name.length))}catch(t){}var l=getColorInfromation(),c={};for(l.length>0&&(n=[]),r=0;r<l.length;r++)n.push(l[r].colorName),l[r].hasOwnProperty("colorType")&&"teamColorVariable"!=l[r].colorType?l[r].isGarmentColor?c[l[r].colorName]="G":c[l[r].colorName]="D":l[r].hasOwnProperty("colorType")||(l[r].isGarmentColor?c[l[r].colorName]="G":c[l[r].colorName]="D");var m={colorLabelArray:n,colorMapArray:c};return e.stringify(m)}}}(app,$,JSON);
    

    不确定这是否是您正在寻找的内容,和/或代码是否仍然有效,但希望这能让您朝着正确的方向前进?

    【讨论】:

      猜你喜欢
      • 2022-11-03
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多