RequireJS忽略了一些路径
问题描述:
我有以下main.js
:RequireJS忽略了一些路径
requirejs.config({
paths: {
'backbone': 'backbone-min',
'underscore': 'underscore-min',
'loader': 'loader-min'
}
})
这种 '架min.js' 文件只是一个优化从loader.js
JS:
define(['backbone', 'underscore'], function() {
})
我的HTML页面包含以下:
<script data-main="/js/main" src="/js/require.js"></script>
<script type="text/javascript">
requirejs(['loader'], function(loader) {
....
})
</script>
顺便说一句,正如我从Fire看到的错误控制台,只有以下网址浏览器负载:
GET /js/require.js
GET /js/main.js
GET /js/loader.js !!! Notice it's loader.js, not loader-min.js
GET /js/backbone-min.js
GET /js/underscore-min.js
所以,这个问题对于模块loader
它会尝试加载文件loader.js
,而不是路径在main.js
配置。未缩小/优化文件,忽略requirejs.config
值。
最奇怪的是,它仍然使用正确的值为backbone
和underscore
。大多数情况下,但不是全部时间。有时它在加载时失败/js/backbone.js
似乎RequireJS在main.js
被完全加载并由浏览器解释之前开始工作。它预期的行为?或我的应用程序有问题?
如何确保requirejs(...)
函数仅在处理完'main.js'后执行?
答
您的main.js文件是异步加载的。然而,这个脚本标签(下面)是连续分析的。所以没有办法预测执行顺序(尽管下面的脚本很可能在异步调用返回之前执行)。
<script type="text/javascript">
// require() and not requirejs()
require(['loader'], function(loader) {
....
})
</script>
你main.js的末尾添加需要调用的文件是这样的:在执行任何要求或定义调用之前
require.config({
// configuration.
});
require(['loader'], function(loader) {
// callback
})
这样RequireJS总是“配置”。
编辑: 我做什么通常是:
<script src="/js/require.js"></script> <!-- No data-main attribute -->
<script src="/js/config.js"></script> <!-- Explicitly load configuration -->
<script type="text/javascript">
require.config({
baseURL: "path/to/base"
});
require(["module"], function(module){
// code
});
</script>
这样,我在什么加载其中明确控制。它也保持我的config.js文件干燥。
我通常在我的引导程序HTML中设置baseURL,因为这样我可以对我的Jasmine测试套件使用相同的配置文件。
如果我有其他模块,uniq每页和用户类型,不仅'loader.js'。这是否意味着无法继续将它们作为单独的脚本使用,我应该将它们全部放入一个巨大的main.js中? – 2013-02-25 11:27:58
我的意思是,requirejs的主要目标是使它可以使用小模块并只加载所需的代码 – 2013-02-25 11:28:58
我编辑了我的答案以回答上述两个问题。希望这可以解决问题。 – 2013-02-25 11:44:16