Igo*_*nov 3 javascript requirejs
我有以下内容main.js:
requirejs.config({
paths: {
'backbone': 'backbone-min',
'underscore': 'underscore-min',
'loader': 'loader-min'
}
})
Run Code Online (Sandbox Code Playgroud)
这个'loader-min.js'文件只是一个优化的 js来自loader.js:
define(['backbone', 'underscore'], function () {
})
Run Code Online (Sandbox Code Playgroud)
我的HTML页面包含以下内容:
<script data-main="/js/main" src="/js/require.js"></script>
<script type="text/javascript">
requirejs(['loader'], function(loader) {
....
})
</script>
Run Code Online (Sandbox Code Playgroud)
顺便说一下,正如我在Firebug控制台上看到的那样,浏览器只跟随网址加载:
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
Run Code Online (Sandbox Code Playgroud)
因此,模块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>
Run Code Online (Sandbox Code Playgroud)
在main.js文件的末尾添加require调用,如下所示:
require.config({
// configuration.
});
require(['loader'], function(loader) {
// callback
})
Run Code Online (Sandbox Code Playgroud)
这样,在执行任何require或define调用之前,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>
Run Code Online (Sandbox Code Playgroud)
这样我就可以明确控制加载的位置.它还保持我的config.js文件DRY.
我通常在我的bootstrap HTML中设置baseURL,因为这样我可以使用相同的配置文件来安装我的Jasmine测试套件.
| 归档时间: |
|
| 查看次数: |
1538 次 |
| 最近记录: |