我有一个像这样的目录结构:
app/
├ js/
│ ├ gui/
│ │ ├ main.js
│ │ └ santa.js
│ └ app.js
└ index.html <- includes requirejs and starts js/app.js
app.js :
baseUrl: 'js' // Pseudo-code for requirejs.config() of course
require('gui/main');
到目前为止一切顺利。但是require()
中的每个相同目标main.js
都会出现问题:
main.js :
require('santa')
尝试不存在的require()
app / js / santa.js 。
require('./santa')
尝试不存在的require()
app / js / santa.js 。
require('gui/santa')
尝试不存在的require()
app / js / gui / gui / santa.js 。
require('./gui/santa')
尝试不存在的require()
app / js / gui / gui / santa.js 。
我似乎将文件包含在内的唯一方法就是:
require('js/gui/santa.js')
哪种方式违背了名称解析和baseUrl
设置的目的。
除了这种奇怪之外,我还希望将baseUrl
更改为js/gui
require()
main.js
。配置应该是可扩展和可覆盖的。但是当我这样做时:
requirejs.config({
baseUrl : 'js/layout'
});
在main.js
内,新的环境似乎被忽略了,就像政客们无视自己的承诺一样。
答案 0 :(得分:1)
您是否尝试过使用define instead of require?
定义可以像这样调用:
define('folder/main',
[ "jquery", './AnotherModule' ],
function($, AnotherModule) {});
第一个参数是模块名称 - 模块的显式路径。通常,您不会包含第一个参数 - define()始终隐式指定路径,并且通常使用显式路径为not recommended。
另一方面,要求不带名称参数。仅使用require()&而不是define()来执行相对于源文件的路径是不可能的,因为require不会创建&#39;模块或定义命名空间。任何需要()的东西都需要相对于root 。
如果在define()中包含相对依赖项(例如&#39; ./ AnotherModule&#39;),则会找到相对于模块名称的相关依赖项。在上面的例子中,。/ OtherModule将解析为文件夹/ AnotherModule。
在对require()的调用中,没有模块名称。相对依赖关系被解析为根。
在您的情况下,这会考虑require('santa')
和require('./santa')
的行为。我唯一的猜测是为什么gui不是以相同的方式行事,因为它包含一个子目录,所以它的处理方式不同。尝试使用require('strange-new-directory/santa')
查看您是否可以获得有关情况的更多信息。
至于baseUrl重置,我相信baseUrl是一个全局特征,无法在中途重置(或者至少,我不建议这样做)。你应该能够使用define
来获得相对路径。祝你好运。