假设您有以下目录结构和以下文件:
root
|-- require-jquery.js
+-- folder
|-- index.html
|-- main.js
+-- AnotherModule.js
在 RequireJS 中,当您引用以“.”开头的模块时,RequireJS 会在当前模块所在的同一文件夹中查找,即使那是一个子目录。但是,如果您在调用define()之前更改baseUrl,RequireJS会将依赖项映射到新的baseUrl。
您可以通过在index.html中设置baseUrl并将data-main更改为相对于baseUrl的路径来解决此问题:
文件夹/index.html:
<script>
var require = {
baseUrl : "../"
};
</script>
<script data-main="folder/main" src="../require-jquery.js"></script>
文件夹/main.js:
define(
[ "jquery", './AnotherModule' ],
function($, AnotherModule) {});
但这仅适用于define():
文件夹/main.js:
require(
[ "jquery", './AnotherModule' ],
function($, AnotherModule) {});
如果我用 require() 尝试,RequireJS 将在根目录而不是文件夹中查找 AnotherModule.js。为什么会这样,特别是为什么define() 和require() 之间的设计差异?
这是因为 Define 指定了模块名称,而 require 没有指定。
Define 可以这样调用:
define('folder/main',
[ "jquery", './AnotherModule' ],
function($, AnotherModule) {});
第一个参数是模块名称 - 模块的显式路径。 Define() 总是隐式指定路径,通常使用显式路径是不建议。 Require 不带名称参数。
当您在 Define() 中包含相对依赖项(如“./AnotherModule”)时,它会相对于模块名称找到。在这种情况下,./AnotherModule 将解析为文件夹/AnotherModule。
在调用 require() 时,没有模块名称。相对依赖关系被解析为根。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)