2012-08-22 85 views
0

我是GWT新手,很難理解模塊ClientBundle之間的根本區別。在GWT文檔的某些區域中,這兩者看起來都是一回事,而在其他地區,顯然它們並不相同。GWT:模塊與ClientBundle?

我的理解是,模塊是部署到用戶瀏覽器的客戶端代碼。這是一個包含HTML,CSS和JS的ZIP文件。

我的理解是,一個ClientBundle類似於一個模塊,但它只包含靜態資源,如圖像。

如果這些理解是正確的,那麼爲什麼需要區分兩者?不是HTML/CSS/JS靜態資源嗎?!?如果我遠離基地,請幫我瞭解它們之間的區別,並且可能會提供每個區域的具體示例,以及適合每種區域的具體示例。提前致謝!

回答

3

您對模塊有了正確的想法 - 它描述了(在開發方面)要使用的java源路徑,啓動編譯的入口點以及各種屬性(瀏覽器,語言環境)編譯時使用。編譯完成後,模塊也代表輸出 - javascript和任何相關的其他編譯文件,無論是日誌,圖像,樣式表等。

相反,ClientBundle是開發人員可以告訴編譯器的方式之一編譯後將使用java源路徑中的某些資源。 CssResource附帶了使用css樣式名稱的額外檢查(如果不是,應該刪除它們以最大限度地減少編譯輸出),ImageResource確保文件在編譯時存在,並且爲每個瀏覽器都以最佳優化方式輸出這些文件。大多數瀏覽器的圖像實際上都包含在大量的JS文件中,以最大限度地減少對服務器的調用次數,對於那些不支持此功能的用戶,它們會自動精確地顯示在一起。

通過聲明ClientBundle接口並調用GWT.create(MyClientBundle.class),您要求編譯器處理ClientBundle的具體細節,以便在您的應用程序中使用這些引用的文件和類。 如何它不具有與GWT發電機,一個更高級的話題比可以在解決SO回答做...

是,ClientBundles 描述由正在運行的應用程序所需的靜態資源,是的,編譯模塊由各種靜態資源的組成,但我會以這種方式重新理解您的理解:ClientBundle是靜態內容可以包含在GWT模塊中以這種方式加載的方式之一儘可能高效。

+0

感謝@Colin Alworth提供了一個非常棒的答案(+1) - 但是我仍然不會*很*在這裏看到「樹林通過森林」......可能會堅持使用「CssResource」或「ImageResource」你能否給我看一個目錄結構,包括同一個項目中的一個模塊和其中一個ClientBundles的目錄結構,並將它們與最終的輸出相關聯,並將它們發送回客戶端瀏覽器?再次感謝! – IAmYourFaja

+0

結構非常簡單 - 聲明CssResource子接口,然後在一組圖像和css文件的同一個包中創建一個ClientBundle類型,並使用@Source註釋將ClientBundle方法映射到文件。輸出比較困難,因爲特別是對於瀏覽器而異的圖像,CSS總是會被燒入最終編譯的JS本身,並且只在需要時才被注入。我喜歡https://developers.google.com/web-toolkit/doc/latest/DevGuideClientBundle作爲討論如何使用它以及一些示例 - 如果不夠清楚,我會修改答案。 –