RequireJS主模块的依赖关系

时间:2015-11-26 12:20:33

标签: javascript requirejs amd

假设我有一个包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

2 个答案:

答案 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()模块。