2012-03-05 113 views
14

我目前正在爲我們想要定義我們自己的API的大型JavaScript項目工作。我使用RequireJS作爲我的依賴加載器,它很適合我,允許我在各自的文件中定義模塊。我不使用我自己的命名空間,模塊返回一個實例,它可以在其他模塊使用,即:如何使用RequireJS構建JavaScript項目

define(
    ['imported_module'], 
    function(module){ 
     module.doSomething(); 
    } 
) 

然而,隨着文件數量的增加,我想,以決定如何構建這些文件在文件夾中。目前我使用下面的方案來命名我的文件:

[projectname].[packagename].[ModuleName] 

一個例子可以stackoverflow.util.HashMap.js。我想向大家介紹一個項目文件夾,每包一個文件夾,重命名文件到模塊的名稱,如:

stackoverflow/util/HashMap.js 

這個結構我的代碼很整齊地到文件夾,但文件名,現在只反映模塊。我想定義一些路由能夠定義RequireJS應該如何查找文件。例如:

文件

stackoverflow/util/stackoverflow.util.HashMap.js 

應由語句導入的

define(['stackoverflow.util.HashMap'],function(HashMap){}); 

有與結構化大型的JavaScript項目,如果是這樣的人的經驗,你可以分享你的做法?

+2

你可以使用自定義插件來做到這一點......類似於'use!stackoverflow.util.HashMap' – blockhead 2012-03-05 16:17:57

+1

由於blockhead說:插件API有一個「標準化」函數,它取一個名字並將其轉換爲路徑。看看:http://requirejs.org/docs/plugins。html#apinormalize – David 2012-03-09 08:33:58

回答

9

您不應在您的js文件名中指定路由信息這些是命名空間和文件夾路徑的作業。所以stackoverflow/util/HashMap.js就好了。你可以使用define(「stackoverflow/util/HashMap」,....)來告訴依賴關係。

如果您需要將模塊放在不同的文件夾中,則可以爲加載器配置路徑,請參閱RequireJS API中的this manual

沒有最好的方式來構建您的js文件。但是將根名稱空間放在src文件夾中始終是一種好的做法。您可以看到dojo source codeYUI source code,併爲您的項目使用類似的方法。他們都是大型Javascript項目。

+0

感謝您的回答,我會看看這些資源! RequireJS的手冊建議不要使用關於優化工具的命名依賴關係。 – thomaux 2012-03-09 15:12:19

2

實際上最好是讓js lib路由來使用標準接口加載所有js:「js.yoursite.com/lib-0.2.js」應該有一個路由器(php或其他,並且能夠緩存查詢)。所以你可以確定和控制你使用的整個程序。因爲常見的jquery插件應該停留在一個目錄中,使用jquery,而不是你自己的自定義插件。

有你控制每個項目由它自己的規則:

jquery/ 
    plugins/ 
    jquery.prettyPhoto.js 
    jquery.min.js 

mySuperJS/ 
    stable.0/ -- there your production version for 1.0 branch 
    module.js 
    0.1/ 
    module.js 
    0.2/ 
    module.js 
    0.3/ 
    module.js 

myOtherlib/ 
    stable.0/ -- production version for all 0.* versions 
    stable.1/ -- production version for all 1.0 versions 
    0.1/ 
    0.2/ 
    0.3/ 
    0.4/ 
    0.4.1/ 
    0.4.1.18/ 

我們使用一年左右這樣的結構,它是對我們最好的。但有時我們會使用更復雜的解決方案,並將libs,插件,工具,組件和應用程序的所有模塊分開。

+0

感謝您的建議,但恐怕這樣的文件夾結構不適合我們的項目。 – thomaux 2012-03-12 09:33:05

相關問題