如何解决Require.js中的循环依赖?

时间:2013-06-17 11:18:04

标签: javascript requirejs amd circular-dependency commonjs

基本上,想法是“sub”模块创建一个对象,该对象应该是作为“主”模块的实用程序库的一部分。但是,“sub”对象依赖来自“main”的实用程序:

// Main module
define(['sub'], function(sub) {
    var utils = {
        utilityMain: function () {
           // ...
        };
        // ...
    };

    tools.subModule = sub;

    return tools;
});

// Sub module
define(['main'], function(main) {
    return new (function () {

        // Singleton object using functions in main module
        var somestuff = function () {
            main.utilityMain();
            // etc
        };
    })();
});   

如何使用require.js实现这一点,而不会产生吞噬整个星球的黑洞?

非常感谢。

1 个答案:

答案 0 :(得分:6)

the docs中提出了一些建议:

  在使用b方法定义模块之后,

a可以稍后获取require()(确保将require指定为依赖项,以便使用正确的上下文查找{{ 1}})

e.g:

a

  

您可以改为使用// Sub module define(['require'], function(require) { return new (function () { // Singleton object using functions in main module var somestuff = function () { require('main').utilityMain(); // etc }; })(); }); 为模块创建一个空对象,该模块可立即供其他模块参考

e.g:

exports

  

循环依赖很少见,通常是您可能想重新考虑设计的标志