requirejs 定义:嵌套依赖

eug*_*ene 2 javascript requirejs

我想定义 A,但 A 应该要求 B 和 B 要求 C(为了 r.js)

这两个有正确的吗?

define([
    'module'
], function(module) {
    require(['C'], function() {
        require(['B'], function() {

            var A;

            return A;
        });
    });
});


require(['C'], function() {
    require(['B'], function() {
        define([
            'module'
        ], function(module) {
            var A;

            return A;
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

Lou*_*uis 5

你的选择都不对。

您的首选尝试使用return从异步回调返回值。这通常是不可能的,RequireJS 也不例外。请参阅此问题及其答案,了解为什么会这样。

您的第二个选择将 adefine放入传递给 的回调中require。这可能适用于某些玩具箱,但一般来说这是行不通的。(“玩具箱”是指所有条件都受到严格控制的概念验证。这种情况并不能反映实际应用的现实。)

Linh Pham 的建议确实是您的选择:

define(["module", "B", "C"], function(module){
    var A;

    return A;
});
Run Code Online (Sandbox Code Playgroud)

如果B取决于C并且不是 AMD 库,请为其添加垫片。在评论中,您反对说如果您这样做,您必须拥有“数百个”垫片。您有几个选项可以避免这些垫片:

  1. 不要C用 RequireJS加载。script在页面上加载 RequireJS 之前使用元素加载它。

  2. 将您的应用程序设计为仅使用一个模块启动,并要求您的应用程序通过C在其他任何事情之前加载来启动:

    require(['C'], function () {
        require(['main']);
    });
    
    Run Code Online (Sandbox Code Playgroud)

    main将是启动您的应用程序的模块。这种方法的缺点是,如果你和我一样,最终你会在 requireC之前忘记require main