2014-03-06 48 views
0

我在示例演示應用程序中使用requireJS。這是我的代碼:requireJS爲什麼每個定義都必須在不同的文件中?

require({ 
    paths: { 
     ToDoModel: '/Scripts/ToDoModel.min', 
     ToDo: '/Scripts/ToDo.min', 
     ToDoService: '/Scripts/ToDoService.min' 
    } 
}, ['ToDo'], function (ToDo) { 

    ko.applyBindings(new ToDo(), $('#toDo')[0]); 
} 
); 

我知道我需要一些文件,儘快應用程序加載。因此,我想ToDoModel,待辦事項和ToDoService結合所有到一個文件中,但define他們作爲獨立的這樣的:

define('ToDoModel', [], function() { 
    ToDoModel = function (data) { 

     ko.mapping.fromJS(data, {}, this); 


    } 
    return ToDoModel; 
}); 

所有的時刻都在不同的文件,你可以看到在路徑屬性。

回答

2

RequireJS不要求define調用位於不同的文件中。只是在開發過程中「一個文件,一個模塊(即一個define)」工作得很好。事實上,RequireJS優化器(r.js)在優化期間將多個define調用合併爲一個文件。那裏沒問題。

你在你的問題中顯示的設置在我看來就像一個開發設置。正常情況下,在開發中我們將RequireJS加載模塊作爲單獨的文件,而不是縮小。 (您的示例顯示您正在加載midified代碼。)對於部署,我們使用r.js將各種模塊縮小並連接到要加載RequireJS的一個文件中。

根據您展示在你的問題是什麼,如果你沒有使用縮小的文件,你可以使用這樣的配置:

{ 
    baseUrl: "/Scripts" 
} 

和RequireJS將能夠查找到您的單個模塊他們的名字的基礎,因爲他們的名字不會有.min

+0

但是,如果我們必須將每個模塊連接成單個文件並下載整個文件而不管其他模塊是否需要,那麼需要jS服務的目的是什麼?我認爲RequireJS的全部目的是在需要時自動下載JS /文本模板文件? – Jack

+0

看看[這個問題](http://stackoverflow.com/questions/20515679/requirejs-to-bundle-or-not-to-bundle/20518314#20518314),和[this one](http:// stackoverflow .COM /問題/ 21272578 /時 - 使用 - 需要JS-和創造,一個單文件使用-R-JS-DO-WE-仍然得到-的/ 21307947#21307947)。 – Louis

相關問題