2012-02-21 50 views
9

在我的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

回答

-3

那麼,在這種情況下,您可以用"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

4

使用對象允許使用變量作爲屬性。用封閉包裝它使得這些變量值得縮小。

//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 = {};工作得很好。

0

如果你唯一地加上你的內部屬性的前綴,你可以嘗試--mangle-props regexhttps://github.com/mishoo/UglifyJS2

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

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