requirejs - 无法使用相对路径加载模块

时间:2013-03-11 09:27:29

标签: javascript requirejs amd

在我的项目中,我有一个包含多个文件的js文件夹。 js文件夹下的一个文件app.js依赖于该文件夹下的其他文件。

我在这里阅读(Relative module names inside define())如果您使用“本地要求”,则可以使用相对路径加载模块。例如,如果我有:

js
|- app.js
|- util.js
|- logger.js

然后我可以做:

//in app.js
define(function(require){
 var util = require("./util");
 var logger = require("./logger");    
 ...
});

但由于某些原因,这对我不起作用。我所看到的发生的是模块util&记录器是相对于我在require配置中定义的baseUrl请求的。

这不是我预期会发生的事情,我无法理解为什么会这样,特别是因为我的项目中有其他模块可以正常使用相对路径。

感谢任何帮助。


更新

这可能发生在这里因为我使用全局需求从另一个模块加载app.js吗?

在init.js中我有:

//in init.js
require(["config"], function (config) {
    require(["app"], function (app) {
    });
});

这会导致问题吗?

1 个答案:

答案 0 :(得分:0)

第一。尽量避免使用CommonJS样式调用require Go for AMD style。

CommonJS风格:

var result = require(resource)

AMD风格:

require([resource], function(result){})

RequireJS执行 NOT 同步加载CJS样式资源。它通过检查函数体并将需求注入到define中来模拟它。你没有看到它,但你在那里写的实际上是:

// app.js
define(['require', 'exports', 'module', './util', './logger'], function(require){
    var util = require("./util"); // <- "sync" call is ok because it's pre-loaded
    var logger = require("./logger"); // <- "sync" call is ok because it's pre-
});

你正在那里进入伏都教领域。尽量明确你需要的东西:

// app.js
define(['./util', './logger'], function(util, logger){
    ...
});

但如果你真的想玩“本地”需求,可以用AMD的方式进行,因为它确实可以解决所有模块ID解析规则:

// app.js
define(['require'], function(require){
    require(
        ['./util', './logger']
        , function(util, logger){
            ...
        }
    )
});

此外,这部分对我没有意义:

require(["config"], function (config) {
    require(["app"], function (app) {
    });
});

我希望"app""js/app" baseUrl - 'js'的价值是多少?

app.js中的路径定义正确,但RequireJS解析"app"的方式可能有问题。