使用requirejs我的main.js看起来像这样
requirejs.config({
baseUrl: '/javascript/',
paths: {
jquery: 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min',
async: 'requirePlugins/async',
hbs: 'hbs'
},
waitSeconds: 7
});
define(['common'], function () {
loadFonts();
});
main.js包含在脚本调用的页面中
<script data-main="/javascript/main.js" src="/javascript/require-2.0.1.js"></script>
Common是网站的基本功能,jquery doc ready函数等包含在define调用中:
define(['jquery'], function() {
//jQuery dependant common code
});
这很好用,从谷歌CDN加载jQuery并执行代码。但是当我在加载main.js
之后添加一个require调用时<script data-main="/javascript/main.js" src="/javascript/require-2.0.1.js"></script>
require(['jquery'], function ($) {
//code
});
从/javascript/jquery.js请求jquery,而不是google cdn的已定义路径。我仍然是requirejs的新手,但在我看来,在任何其他请求被解雇之前应该定义路径,有人可以帮我理解我做错了吗?
答案 0 :(得分:6)
我认为这可能是因为在RequireJS脚本标记上使用了data-main
属性;要解析它,RequireJS本身必须加载和解析。在我的测试中(特别是对于IE9),在解析RequireJS配置文件(由data-main
属性指定的文件)之前,浏览器将直接在RequireJS脚本标记之后下载并执行任何脚本标记。
为了解决这个问题,我只是使用data-main
属性退出,而是将配置文件直接放在RequireJS脚本标记之后作为普通脚本标记,现在一切似乎都很开心。
具体来说,这就是它的样子(使用你的样本):
<script src="/javascript/require-2.0.1.js"></script>
<script src="/javascript/main.js"></script>
答案 1 :(得分:5)
也许你在加载require js之前放置了config语句。
你应首先加载require.js,然后输入你的配置代码,然后调用require(['jquery'],...);
它搜索/ javascript /的原因是因为你的require.js文件位于那里,它是默认的基本网址。
您的配置可能永远不会被require.js使用。
有关require config的信息,请参阅this tutorial。
答案 2 :(得分:0)
您必须将define重命名为require
require(['common'], function () {
loadFonts();
});
答案 3 :(得分:0)
答案 4 :(得分:0)
原因是您在加载require.js模块后立即放置require(['jquery']...
。结果,它会在读取配置设置之前尝试加载['jquery']
。
为什么它试图在/javascript/jquery.js
中找到jquery?这是因为您的data-main
属性。
RequireJS加载相对于baseUrl的所有代码。 baseUrl是 通常设置为与data-main中使用的脚本相同的目录 要为页面加载的顶级脚本的属性。
此链接阐明了require.js模块加载过程: http://requirejs.org/docs/api.html#jsfiles
答案 5 :(得分:-2)
我认为你可以在require块中嵌入完整的url。像:
require(['http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min'], function ($) {
//code
});
顺便说一下,你的jquery链接无效。