2012-12-10 89 views
0

我們正在開發一個用於JSF應用程序的javascript組件,並且我們正在使用Dojo。 問題是我們只需要庫的特定部分,我們只想將我們用來完成目標的文件/文件夾插入到我們的web應用程序中。Javascript庫:僅加載需要的文件

我們可以'手動'做到這一點,但是將來我們可能需要從Dojo添加其他功能,然後我們不會知道我們需要什麼資源 - >我想這一刻你意識到我們不是Dojo/js大師。

基本上我們正在尋找一種方法來自動化這個過程。我們正在考慮獲取依賴關係列表,然後創建一個小腳本來「過濾」這些文件。

這可能嗎?有沒有人試過這個? 謝謝。

+0

我怎麼能接受或關閉或紀念這一問題作爲「解決」? – tartak

回答

-2

網絡上充斥着成熟的JavaScript庫,他們會說,他們會節省你的一天,讓你的網絡開發生活變得更容易。你會被鼓勵將這些「僅僅80kb」的庫包含在內,這些庫應該是滿足你所有需求的解決方案,並且實際上可以使網站自行工作。不用說,我不是JavaScript庫的大追隨者,尤其是因爲它們幾乎總是包含許多多餘的代碼,所以我認爲我只用一個基本的JavaScript函數組合了一個小型庫。

這就是EJ - Essential JavaScript的結果。

EJ由我一直使用的函數組成,它們使JavaScript寫得更快,結果能夠更高效地工作。這也是爲了讓你可以一次又一次地爲你製作的每一個網站寫一些東西,而不是一個整潔而小小的文件,以便能夠專注於你需要解決的新事情。

0

我可能會誤解你的請求,但我認爲道場會做你想要的東西。由於最新版本的dojo遵循異步模塊定義(AMD)格式,因此您可以使用全局require函數來描述特定代碼塊具有哪些依賴關係,並且只加載那些模塊。從sitepen dojo intro一個例子:

require(["dojo/dom", "dojo/domReady!"], function(dom){ 
    var greeting = dom.byId("greeting"); 
    greeting.innerHTML += " from Dojo!"; 
}); 

如果你只希望有加載一個<script/>標籤,你會想看看道場建設者。使用online build tool您可以選擇要包含在dojo.js圖層中的軟件包,它會將所有內容捆綁到一個zip文件中,該文件包含dojo.js/dojo.js.uncompressed.js,其中包含您的模塊以及dojo內核選擇。

+0

是的,但在這種情況下,我只會聲明'dojox/charting/Chart',並且只會在我的webapp文件夾中使用dojox/charting/Chart.js文件,這會導致錯誤,因爲Chart.js文件自身使用其他文件,使用其他文件等。我需要一種方法來找到這個依賴關係的整個「樹」。 – tartak

+2

@tartak:您應該在開發期間將所有的dojo文件保存在您的文件夾中(最好是非縮小版本,以便於調試)。如果你想最小化上傳到生產服務器的文件數量,那麼你可以使用這個構建系統。 – hugomg

+0

「......使用該構建系統。」這正是我們想要的。你有什麼建議嗎? – tartak

0

好吧,我們這樣做是通過以下操作(以防萬一任何人都需要這個):

 
    * declare a JSF filter and map it to /js/* (all dojo resources are under /js folder, this may need to be modified to fit your folder structure); this way, all requests for a dojo resource will be filtered. 
    * in the filter class, get all the requested files: (HttpServletRequest) request).getRequestURI() and write it line by line in a file: now you have all the needed resources. 
    * parse that file with a script, line by line, and copy the files to another location -> build the folder structure. 
    * use the created files in your WebContent folder (or wherever you need it), you have a clean library -> you only deploy what you use. 
相關問題