如何告訴Closure編譯器不要重命名內部函數?例如,鑑於此代碼:如何告訴Closure編譯器不要使用SIMPLE_OPTIMIZATIONS重命名內部函數?
function aMeaninglessName() {
function someMeaningfulName() {
}
return someMeaningfulName;
}
...我沒事用封重命名外部函數(我積極地希望它來,以節省空間),但我想要的功能名稱someMeaningfulName
單獨留在家中(這樣在調用堆棧中顯示的名稱是「someMeaningfulName」,而不是「a」或其他)。儘管調用它的代碼將通過工廠函數返回的引用來完成,而不是通過代碼中的名稱。例如,這純粹是爲了調試支持。
注意,我希望函數有實際的名稱,不得匿名,並使用該名稱分配給某些屬性,因此例如這不是this other question重複。
這個有點難理解的用例似乎不屬於extern或exports功能。 (我有點希望會有一些annotation我可以扔在它。)但我不是Closure Compiler大師,我希望你們中的一些人。當然,如果沒有辦法做到這一點,這是一個可以接受的答案。
(用例是響應呼叫到它創建的函數庫。我想提供一個版本,我們被封閉與SIMPLE_OPTIMIZATIONS預壓縮的庫,但如果有人使用該副本我們希望他們看到有意義的名字,我可以用eval
解決它,或者手動編輯壓縮結果[in事實上,上下文足夠獨特,我可以在其上輸入一個sed
腳本],但這很尷尬,並坦率地把我們帶入「不值得打擾」的領域,因此尋找一種簡單,低維護的方式。)
因此,如果我認爲這是值得的,我會用我自己的本地定製版本的編譯器,它具有'CodingConventions.Proxy'來包裝默認的編碼約定,並重寫...什麼,'isPrivate '爲了讓那個成員返回'false'? – 2012-02-28 17:38:14
isExported(String name,boolean local)是感興趣的方法,特別是當「local」爲true時。 – John 2012-02-29 01:13:14
謝謝。那麼我必須破解'CommandLineRunner'來添加一個標誌?從外觀上看,我可能想要包裝或擴展'ClosureCodingConvention'而不是默認的,以獲得我通常得到的相同行爲以及我的特殊位。總的來說,這不算太糟糕,Closure下載和構建沒有任何麻煩。如果我覺得真的很有野心,我可能會添加一個註釋,並將其作爲補丁提供。 – 2012-02-29 07:13:54