javascript - 使用 requireJs 的模块中的循环依赖

标签 javascript requirejs dependency-management circular-dependency

阅读requireJs文档,
为了修复循环依赖,建议使用 exports 为模块创建一个空对象,该对象可立即供其他模块引用。

我试过这段代码,但它似乎不起作用。怎么了?

附言:
阅读评论以查看输出,
特别是 setTimeout 调用中的 B 模块。


// A module
define([
    'b'
], function (b) {
    console.log('B:', b); // B, Object
    var A = {
        boo: 1
    };

    return A;
});

// B module
define([
    'a',
    'exports'
], function (a, exports) {
    console.log('A:', a); // A, undefined (as I was expecting)
    exports.A = function () {
        return a;
    }

    var B = {
        bar: 1
    };

    setTimeout(function () {
        console.log('exports.A', exports.A()); // exports.A undefined 
                                           // I would like to access the A object
                                           // which is defined in A module
    }, 500);

    return B;
});

// main.js

(function () {

    define([
        'a'
    ], function () {
    });
}());

最佳答案

您应该能够在 B 模块中使用 require() 的同步版本来访问“A”模块:

// B module
define([
    'a',
    'exports'
], function (a, exports) {
    console.log('A:', a); // A, undefined (as I was expecting)
    exports.A = function () {
        return require('a');
    }
    ...
});

关于javascript - 使用 requireJs 的模块中的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11264827/

相关文章:

java - 在依赖管理中导入pom

java - Maven依赖冲突解决

javascript - 多个数组,需要找到嵌套数组位置

javascript - 从字符串中删除逗号和其后的空格

javascript - 如何优化作为 RequireJS 模块创建的 JavaScript 文件子集

javascript - 如何在 RequireJS (AMD) 环境中访问 node.js 模块?

javascript - 我应该接受来自dependabot 更新yarn.lock 的自动PR 吗?

javascript - 多个类获取每个值

javascript - 用键盘控制 JavaScript 幻灯片

google-chrome-extension - Chrome 扩展中的 RequireJS