缩小对象属性的解决方案?

问题描述:

在我的JavaScript应用程序中,我只将多个对象用于内部目的(用户不需要访问它们)。例如:缩小对象属性的解决方案?

var images={ 
    blank:"blank.gif", 
    plus:"plus.gif", 
    minus:"minus.gif" 
} 

当我使用像Uglify.js一个minifier,属性名(空白,加,减)保持原样。有没有办法缩小它们?

我已经考虑迄今:

  • 使用谷歌关闭minifier在高级模式,但这种击碎我的代码
  • 替换变量对象的属性(如VAR imagesBlank =“blank.gif”),但它使代码更不可读

有没有更好的方法?

+3

*在高级模式下使用Google Closure minifier,但是这会压缩我的代码* ...您应该仔细阅读文档并调整您的代码,使其不会崩溃。我认为Google Closure编译器是最好的选择。 – 2012-02-21 17:05:55

+0

@FelixKling你会有与我的问题有关的特定链接吗?此外,随时发布他们作为答案,以便我可以接受它! – Christophe 2012-02-21 19:53:32

+0

不,不是真的......只有文档(http://code.google.com/closure/compiler/docs/api-tutorial3.html)。 – 2012-02-21 21:07:43

那么,在这种情况下,您可以用"blank.gif"替换所有对images.blank的引用,与plusminus相同。虽然这确实意味着更多的工作,如果你出于某种原因决定更改所有文件名,那么没有任何全局搜索和替换无法修复。根本不需要images对象。

+0

这只是一个例子。在我的代码中,图像链接实际上更长:“http://domainName/hierarchy/blank.gif”。重复该字符串不会解决缩小问题。我可以将它存储在一个变量中,但后来我们回到了我的问题。 – Christophe 2012-02-21 17:15:09

+0

那么,你可以有一个变量'baseimgurl =“http://示例。com/hierarchy /“;'并且只是把它放在你的图片链接上......也许吧。 – 2012-02-21 18:34:12

使用对象允许使用变量作为属性。用封闭包装它使得这些变量值得缩小。

//Wrap in closure 
(function() { 

    //Property Variables 
    var blank = 0; 
    var plus = 1; 
    var minus = 2; 

    //Define Object 
    var image = []; 
    image[blank] = "blank.gif"; 
    image[plus] = "plus.gif"; 
    image[minus] = "minus.gif"; 

    //Accessors - must be within closure 
    image[blank]; //blank.gif 
    image[plus]; //plus.gif 
    image[minus]; //minus.gif 

})(); 

要访问的上方,常数必须闭合内使用的值。

如果使用谷歌的关闭编译器,使用var image = [];将在宣布所述阵列更有效,因为在属性值被从零计数,即012

否则,var image = {};工作得很好。

如果你唯一地加上你的内部属性的前缀,你可以尝试--mangle-props regexhttps://github.com/mishoo/UglifyJS2

下面是它在我的gulpfile中的使用,它需要gulp-uglify。

var uglifyOpts = { 
    // Mangles the private "p1_" prefixed properties in an object 
    mangleProperties: { 
     regex: /^p1_/ 
    } 
};