在我的项目中,我有一个包含多个文件的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) {
});
});
这会导致问题吗?
答案 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"
的方式可能有问题。