代码之家  ›  专栏  ›  技术社区  ›  ozgus

RequireJS模块未加载依赖项

  •  1
  • ozgus  · 技术社区  · 11 年前

    我在使用requireJS加载模块时遇到问题。我有两个文件:

    文件1:app1/js/utils/commons/commons.js

    define("utils/commons/commons",
        [
            "../../../../app2/MenuModule"
        ], function (MenuModule) {
    //MenuModule is undefined here
    var app = angular.module('commons', ['MenuModule']);
    
    });
    

    文件2:app2/MenuModule.js

    define("../../../../app2/MenuModule",
        [
            "../../../../app2/MenuController",
            "../../../../app2/MenuRestProvider"
    
        ], function (MenuController,
        MenuRestProvider) {
    
    var app = angular.module('MenuModule', []);
    
    app.factory('MenuRestProvider', MenuRestProvider);
    app.controller('MenuController', MenuController);
    
    return app;
    
    });
    

    重点是:File1加载File2,并运行File2的“define”函数。未提取File2的依赖项,并且未计算传递给“define”函数的函数。你能看出这个问题的原因吗?

    1 回复  |  直到 11 年前
        1
  •  1
  •   Chris Knoll    11 年前

    我认为您将路径与模块ID混淆。很容易将两者混淆,因为路径最终会导致根据模块ID的重新命名来定义它,但是当您在模块引用中放置相对符号时,不要考虑“向上移动路径”,而是要考虑“向模块层次结构移动”。

    这意味着你需要与我们共享你的路径配置,这样我们就可以看到如何将引用的模块ID转换为加载路径。

    也同意:将moduleID直接放在define()调用中有代码气味。您应该让amd加载器为您定义moduleID(通过使它们成为匿名模块)。