我的目录结构如下:
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
内,新的设置似乎被忽视了,就像政客们忽视了自己的 promise 一样。
最佳答案
您是否尝试过使用 define instead of require ?
Define 可以这样调用:
define('folder/main',
[ "jquery", './AnotherModule' ],
function($, AnotherModule) {});
第一个参数是模块名称 - 模块的显式路径。通常,您不会包含第一个参数 - Define() 总是隐式指定路径,通常使用显式路径是 not recommended .
另一方面,Require 不采用名称参数。仅使用 require() 而没有 Define() 来创建相对于源文件的路径是不可能的,因为 require 不会“创建”模块或定义 namespace 。任何 require() 的内容都是相对于 root 所必需的。
当您在define() 中包含相对依赖项(如“./AnotherModule”)时,它会相对于模块名称找到。在上述情况下,./AnotherModule 将解析为文件夹/AnotherModule。
在调用 require() 时,没有模块名称。相对依赖关系被解析到根。
<小时/>就您而言,这将解释 require('santa')
和 require('./santa')
的行为。我对 gui 为何不以相同方式运行的唯一猜测是,由于它包含一个子目录,因此处理方式不同。尝试使用 require('strange-new-directory/santa')
看看是否可以更深入地了解情况。
至于baseUrl重置,我相信baseUrl是一个全局特征,不能在中途重置(或者至少,我不建议这样做)。您应该能够使用 define
获得相对路径。祝你好运。
关于javascript - RequireJS require() 无法解析同一子目录级别的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22355269/