【发布时间】:2013-06-27 10:43:15
【问题描述】:
我的脚本目录结构非常简单:
/js/ <-- located in site root
libs/
jquery-1.10.1.min.js
knockout-2.2.1.js
knockout.mapping.js
models/
model-one.js
model-two.js
...
require.js
config.js
由于站点引擎使用干净的 URL,我在 <script> 中使用绝对路径:
<script type="text/javascript" data-main="/js/config.js" src="/js/require.js"></script>
RequireJS 配置:
requirejs.config({
baseUrl: "/js/libs",
paths: {
"jquery": "jquery-1.10.1.min",
"knockout": "knockout-2.2.1",
"komapping": "knockout.mapping"
}
});
HTML 中的某处:
require(["jquery", "knockout", "komapping"], function($, ko, mapping){
// ...
});
所以问题是RequireJS完全忽略了配置文件中定义的baseUrl和paths。对于下面代码中所需的每个模块,我都会收到 404 错误。我在浏览器控制台中看到 RequireJS 尝试从 /js/ 加载这些模块而没有任何路径转换:
404: http://localhost/js/jquery.js
404: http://localhost/js/knockout.js
404: http://localhost/js/komapping.js
但是在页面加载并显示错误后,我在控制台中输入并...
> require.toUrl("jquery")
"/js/libs/jquery-1.10.1.min"
为什么会这样?如何解决这个问题?
这是我第一次使用 RequireJS,所以我觉得我跳过了一些非常简单明了的东西。请帮忙。
更新
刚发现这个问题:Require.js ignoring baseUrl
这绝对是我的情况。我在我的网络面板中看到config.js 在require(...) 触发自己的依赖项加载之前没有完全加载。
但我不想将我的require(...) 放在配置中,因为它对于调用它的页面非常具体。在之前看到的任何示例中,我从未注意到这种异步问题。这些示例的作者如何让他们继续工作?
【问题讨论】:
-
您是否尝试删除第一个斜杠 'js/libs/' ?
-
@paka 刚试过。没有变化。
-
它是否适用于绝对路径?
-
是的,它适用于绝对路径(
ko-mapping除外,因为它依赖于knockout)。 -
所以,你必须找出从脚本(配置)到库的正确路径...requirejs.org/docs/api.html#config
标签: javascript requirejs