4

我熟悉使用字符串文字和導出以防止Closure重命名變量的概念,但是如何防止Closure使用由其他代碼(我沒有寫入)用作全局變量的變量名稱, ?如何防止Closure Compiler在全局名稱空間中創建特定的變量名稱?

實施例,下面是爲一封閉的成員函數創建的:

function $() { 
    var a; 
    if(1 > N) { 
     return-1 
    } 
    a = Math.pow(1 + Q, F); 
    return ..... 
    } 

上方被加載的jQuery時重挫。

我使用的命令行編譯器,這是我的命令行:

Java的罐子compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --formatting = pretty_print --output_wrapper PGS --js common.v2 .0.raw.js --module common_min:1個--js page_code.raw.js --module page_code_min:1:common_min

我以爲output_wrapper選項用來解決這個問題,但無論是我我誤解了它的目的,或者我濫用了它。

TIA。

回答

3

答案是externs

Externs在外部代碼中定義符號。它們有兩個主要目的:

  • 提供了外部符號的定義和類型信息,以便您的代碼可以在沒有錯誤/警告的情況下調用它們。
  • 阻止編譯器使用的代碼

外部定義符號名在你的情況,你可以包括jQuery的現有外部量。 project contrib folder中的每個主要版本都有一個。

+0

謝謝。我誤解了'externs'僅用於防止在被縮小的代碼中重命名對外部庫的函數調用。由於被縮小的代碼不包括對_jQuery_代碼的調用,我沒有看到需要包含外部定義。我也使用** FancyBox **,** HighCharts **及其導出模塊。如果我找不到這些庫(我沒有找到)的'extern'文件,那麼我想我要麼堅持創建我自己的文件,要麼我不應該使用'ADVANCED_OPTIMIZATIONS'選項。正確? – Karl

+2

你是對的。儘管簡單地保留一個符號名稱,但extern可能非常基本。就像'var librarynamespace = {};'很好。不需要完整的定義。 –

相關問題