2017-06-16 57 views
1

這是我的頁面的樣子RequireJs忽略配置在上下文中使用

<script> 
// set the configuration for require.js syncronously 
var require = { 
    context: 'default', 
    baseUrl: '/scripts', 
    bundles: { 
      'bundles/main': ['utils'] 
    } 
}; 
</script> 


<script src='/scripts/libs/require.js'></script> 

<script> 
// this throws an error because it tries to load module1.js from the current relative path instead of /scripts/module1.js 
require(['module1'],function(module1){ 
    module1.test(); 
}); 
</script> 

我查看了幾個這樣的答案計算器上類似的問題:Require JS is ignoring my config

這裏的文檔:https://github.com/requirejs/requirejs/wiki/Patterns-for-separating-config-from-the-main-module

如果我正確地理解了這一點,通過在包含require腳本之前同步聲明require,這些設置在載入module1時應該可用,但它似乎不工作。

我最初嘗試這種方式具有相同的結果:

<script src='/scripts/libs/require.js'></script> 

<script> 
require.config({ 
    context: 'default', 
    baseUrl: '/scripts', 
    bundles: { 
     'bundles/main': ['utils'] 
    } 
}); 
</script> 

編輯:顯然,當我刪除行的上下文它工作正常。我不知道爲什麼這會打破它。

回答

1

問題是,您在與您在配置中使用的上下文不同的上下文中發出require調用。如果未指定上下文的默認名稱,則爲_(而不是default)。使用您顯示的代碼,配置中的上下文爲default。但是您使用RequireJS提供的默認require調用,該調用在名爲_的上下文中運行。

當您指定不同於默認上下文名稱,要保存從require.config調用的返回值,並使用該值默認require代替:

var myReq = require.config({ 
    context: 'default', 
    baseUrl: '/scripts', 
    bundles: { 
     'bundles/main': ['utils'] 
    } 
}); 

myReq(['module1'],function(module1){ 
    module1.test(); 
}); 

的文檔見here關於如何使用context

如果您實際上不需要使用上下文,那麼最簡單的解決方案就是從您的配置中刪除context: 'default'