假设我有一个包common/lib
,我在其中为jQuery和AngularJS定义RequireJS模块。
现在让我们假设我有以下config.js
:
require.config({
baseUrl: 'http://www.some-website.com/scripts/',
paths: {
'common/lib': 'bundles/common/lib',
},
shim: {
'main': ['common/lib']
}
});
看一下配置的依赖关系,main
应该等待common/lib
加载(定义{{1}}模块)。
这是我的angular
:
main.js
define('main', ['angular'], function (angular)
{
// Use angular here
});
模块需要main
模块,但angular
模块位于angular
包中,因此我告诉common/lib
等待main
,以便定义模块。
但是,这似乎不起作用,common/lib
不等待main
,因此,尝试找到一个没有运气的未定义common/lib
模块,引发错误。< / p>
所以,我的问题是:
如何配置主模块的依赖关系?
我应该注意,我没有在angular
的{{1}}标记上使用data-main
属性。
相反,我在script
之后将其作为普通脚本加载,然后我执行此行以加载main.js
模块:
config.js
答案 0 :(得分:1)
使用bundles
配置选项解决了您要做的事情。您可以将其添加到您的配置中:
bundles: {
'common/lib': ['angular', ...]
}
这实质上告诉RequireJS,当它想要加载angular
模块时,它应该加载common/lib
模块,然后定义angular
。我已将...
放入列表中,因为您可能希望在其中添加其他模块名称。
请注意,shim
仅适用于不适合AMD模块的模块(即那些不调用define
的模块)。将shim
与模块作为AMD模块一起使用会导致未定义的行为。因此,您在问题中使用shim
是不正确的。
答案 1 :(得分:0)
一种解决方案是删除填充程序依赖项,并在main
定义中将其指定为模块要求:
define('main', ['common/lib'], function ()
{
// 'angular' module is guaranteed to be defined
var angular = require('angular');
// Use angular here
});
如您所见,我稍后使用angular
函数加载require()
模块。