0

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

我在这里读到(define() 中的相对模块名称),如果您使用“本地要求”,则可以使用相对路径加载模块。例如,如果我有:

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

然后我可以这样做:

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

但由于某种原因,这对我不起作用。我所看到的情况是,模块 util & logger 被请求相对于我在我的 require 配置中定义的 baseUrl。

这不是我所期望的,我无法真正理解它为什么会发生,特别是因为我的项目中有其他模块可以在相对路径下正常工作。

任何帮助表示赞赏。


更新

是否有可能在这里发生这种情况,因为我正在使用全局要求从另一个模块加载 app.js?

在 init.js 我有:

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

这会导致问题吗?

4

1 回答 1

0

第一个。尽量避免 CommonJS 风格调用requireGo for AMD 风格。

CommonJS 风格:

var result = require(resource)

AMD风格:

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

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

// 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"可能是个问题。

于 2013-03-12T18:26:36.637 回答