2012-10-29 184 views
1

Closure編譯器可以配置爲將選定類型的警告提升爲錯誤。當開發團隊想要將他們的JS保持在更嚴格的標準時,這很有用。但是,我遇到了一個我們依賴的一些庫(如RequireJS)並不嚴格的問題。所以當我這樣做時:避免externs中的編譯器錯誤(閉包編譯器)

java -jar compiler.jar --js input.js 
         --compilation_level ADVANCED_COMPILATION 
         --externs require.js 
         --jscomp_error=missingProperties 

構建在RequireJS中失蹤的屬性錯誤失敗。當然,沒有錯誤升級,構建成功。

在Require的情況下,公共符號很少,因此創建一個虛假的externs文件而不是使用真實的文件是微不足道的。但這並沒有擴展 - 我們使用無數其他庫,這些庫都需要維護單獨的外部合同。

我看到兩種可能的解決方案,但沒有足夠的信息來執行任何一種。 (1)使Closure返回到extern的正常警告配置;或者(2)使用能夠可靠/一致地提取給定圖書館的外部合同的工具。或者我沒有想到的任何其他解決方案。

回答

2

你想創建外部文件,而不是使用原始源文件。使用原始源只適用於非常簡單的庫。我知道有幾個工具可以提取extern,但它們不提供類型信息。一般來說,你想向圖書館維護者詢問一些事情,然後詢問Closure編譯器郵件列表,然後自己構建一些東西(並共享它)。

+0

這是我害怕的答案。大多數圖書館不保留extern文件,內部這樣做並不現實。但感謝您驗證此問題的「正確」立場。 –

+0

是否有一個extern文件可用於庫是決定使用哪個編譯級別的主要因素。請參閱http://closuretools.blogspot.com/2012/09/which-compilation-level-is-right-for-me.html –