我希望能夠有選擇地定義一個模塊,然後在我的代碼中使用它。我正在考慮的特定情況是在調試/測試環境中加載模擬/存根模塊,但不是在我上線時加載。下面是例如:使用requirejs是否可以檢查一個模塊是否被定義而不嘗試加載它?
在JS文件將被任選加載(僞碼)的HTML文件:
//index.cshtml
...
<script src="/Scripts/lib/require.js"></script>
<script src="/Scripts/app/service_user.js"></script>
<script src="/Scripts/app/real_service.js"></script>
#if DEBUG
<script src="/Scripts/app/mock_service.js"></script>
#endif
在兩者real_service和mock_service以上必須在調試版本被加載。
每個模塊將使用requirejs,如定義:如果mock_service已被定義
//mock_service.js
define('mock_service', [],
function() {
...
});
//real_service.js
define('real_service', [],
function() {
...
});
然後使用該服務時,我想檢查:
//service_user.js
define(['require', 'real_service'],
function (require, real_service) {
if (require.isDefined('mock_service')) { // 'isDefined' is what I wish was available
var mock = require('mock_service');
mock.init(real_service);
}
...
});
所以我的名義' isDefined'函數只會檢查已定義的給定名稱(或名稱)的模塊。然後在我的代碼中,如果它被定義,我可以要求它並使用它。如果沒有,那也沒關係。
對我而言,重要的是不要嘗試加載可選模塊。我可以嘗試/趕上require語句,但這會導致嘗試從服務器加載它,我不想那樣做。
另一種方法是創建一個我總是加載的存根定義,所以總是有一個模擬需求,然後我可以詢問它是否是真實存在的,但這也看起來很浪費。
有沒有人深入require.js,他們發現他們需要這個功能並制定了實施策略?
謝謝你在前進,羅布
Thx - 這幾乎滿足了我的需求,幫助我找到了正確答案,現在我已添加並標記爲完整解決方案。 – WooWaaBob 2013-02-22 16:43:37
+1很好的答案和一個不錯的功能,不知道這一個! – thomaux 2013-06-11 13:29:42
只是好奇,如果在杏仁版本的任何替代? – 2016-04-07 03:48:47