2010-09-17 37 views
4

我一直在閱讀關於模塊模式,但我讀的所有內容都假設模塊的全部內容都將放在一個文件中。我想每個類都有一個文件。如何將多個文件放入單個命名空間/模塊? (javascript)

我已經使出了在每個文件的頂部這樣做:

if(window.ModuleName === undefined) { window.ModuleName = {}; } 

ModuleName.ClassName = function() { ... } 

但是這允許包含的文件沒有他們的依賴關係,這也是惱人的。例如,假設有ClassA其中使用ClassB,並且「ClassB.js」不在HTML中,則ClassA將拋出錯誤。據我所知,Javascript缺少一個import聲明,所以在這種情況下,我實際上希望每件事都在一個文件中。

我認爲大的JavaScript項目被分解成多個文件,所以必須有解決方法。它通常如何完成?是否有一些工具可以將多個類文件合併爲一個模塊文件?

回答

3

這是一個很大的話題,但讓我盡我所能解釋。 Javascript要求你已經預裝了你打算使用的任何東西,這就是爲什麼你的模塊模式在同一個文件中包含所有「東西」的原因。但是如果你打算用不同的文件將它們分開,那麼你必須在使用之前進行管理。我建議採用以下方法

  1. 將它們連接在服務器之前連接它們。例如,在jsp中,您可以創建一個返回contenttype =「text/javascript」的servlet,在該servlet中,您可以將所需的所有腳本附加到一個動態生成的腳本中,然後將其返回給客戶端。

  2. 在你的ant或maven版本等等,有一些配置可以將你想要的文件連接在一起。這是一種常見的做法,因此您應該在互聯網上找到許多參考。

  3. Lazy-load javascripts。這是我喜歡的方式。我使用Lazyload javascript library。基本上我聲明某些代碼的依賴性很像Java中的「import」,然後在我調用其中的任何一個之前加載它們的依賴關係。這可以實現優化的依賴性加載而不需要腳本冗餘。問題是你需要編寫一些相當複雜的腳本來做到這一點。

希望有所幫助。

+0

+1 - 我會去創建一個大的JavaScript文件並縮小它。你也應該將這種方法應用到你的css中。 – Castrohenge 2010-09-17 08:27:19

+0

感謝您提供豐富的答案。順便說一下,我瀏覽了jQuery項目makefile,看起來他們有一個手工製作的文件列表,它們正在用'cat'連接。 – 2010-09-17 08:45:08