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

2024-01-27

基本上,这个想法是“子”模块创建一个对象,并且该对象应该是作为“主”模块的实用程序库的一部分。然而,“子”对象depends关于“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 实现这一目标,而不创建一个吞噬整个地球的黑洞?

非常感谢。


有一些建议the docs http://requirejs.org/docs/api.html#circular:

b可以取a稍后使用以下方法定义模块后require()方法(请务必将 require 指定为依赖项,以便使用正确的上下文来查找a)

e.g.:

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

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

or

你可以改为使用exports为模块创建一个空对象,可供其他模块立即引用

e.g.:

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

    exports.subModule = sub.sub;
});
// Sub module
define(['main', 'exports'], function(main, exports) {
    exports.sub = new (function () {

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

and

循环依赖很少见,通常表明您可能需要重新考虑设计

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解决Require.js中的循环依赖? 的相关文章