【问题标题】:Why requireJs wouldn't load defined dependency modules?为什么 requireJs 不会加载已定义的依赖模块?
【发布时间】:2024-10-10 08:10:02
【问题描述】:

我在使用 Require.js 为我的模块加载依赖项时遇到问题。基本上我有以下模块,我在其中定义了主干模型的扩展。

define(["models/services/ProjectServices"],

    function (ProjectServices) {

        var SomeModel = Backbone.Model.extend({

             sample: function () {
             var servicesFromDependency = ProjectServices; //undefined
             var projectServices = window.require.s.contexts._.defined["models/services/ProjectServices"]; //defined and Ok
             }
         });
        return SomeModel;
    }
);

在这个模块中,我想使用已经定义好的 ProjectServices 模块。为此,我将其添加为依赖项。问题是在定义的示例函数 ProjectServices 中显示为未定义。但是,如果我直接查看需要定义的模块,它会正确显示在那里并且我可以使用它(尽管我不想要,因为我不喜欢以这种方式破解它)。为了添加更多上下文,我还在其他模块上使用此 ProjectServices 依赖项,并通过定义函数正确加载它。

关于为什么模块不会被加载的任何建议?

【问题讨论】:

    标签: backbone.js requirejs


    【解决方案1】:

    在模块中试试这个:

    var ProjectServices = require('models/services/ProjectServices');
    

    我认为在很多情况下,不需要窗口全局分配,我在使用 requirjs 时尽量避免。

    【讨论】:

    • 由于它的行为类似于循环依赖,我认为这是正确的答案,因为在这种情况下 requirejs 文档也建议这样做
    【解决方案2】:

    我唯一能想到的是一个可能的循环引用,这意味着两个模块相互需要(不应该是这种情况)。

    正如你所说的 require 在其他模块中运行良好,它不应该是由于所需模块中缺少 return 语句,或者路径错误。 (无论如何,您都可以检查一下)。

    【讨论】:

    • 感谢建议,我没有发现循环依赖本身,但它的行为方式可能表明它是由类似循环依赖的 require 评估的
    最近更新 更多