使用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>
常见的是网站,裹在定义调用jQuery的文档准备功能等基本功能:
define(['jquery'], function() {
//jQuery dependant common code
});
这工作得很好,jQuery是从谷歌CDN加载并执行代码。 但是,当我main.js的负载后添加需要调用
<script data-main="/javascript/main.js" src="/javascript/require-2.0.1.js"></script>
require(['jquery'], function ($) {
//code
});
jQuery是从/javascript/jquery.js而不是限定路径谷歌CDN请求。 我还在requirejs一个新人,但似乎我的路径应该被定义的任何其他请求被解雇之前,可以请人帮助我理解我在做什么错?
我想,这可能是由于使用data-main
在RequireJS脚本标记属性; 为实现这一目标进行解析,RequireJS本身具有加载和分析。 在我的测试(专为IE9),浏览器会下载并执行任意脚本标记后直接解析RequireJS配置文件(由指定的前RequireJS脚本标签data-main
属性)。
为了解决这个问题,我简单地使用退出data-main
属性,而不是放在配置文件作为一个正常的脚本标签RequireJS脚本标签后直接,一切似乎是幸福的现在。
具体而言,这是什么样子(使用您的样品):
<script src="/javascript/require-2.0.1.js"></script>
<script src="/javascript/main.js"></script>
也许你把配置语句需要加载JS之前。
你应该先加载require.js,之后把你的配置代码,然后调用需要([“jQuery的”],...);
它搜索/ JavaScript的原因/是因为你的require.js文件位于那里,它是默认的基本网址。
你的配置可能永远不会被require.js使用。
请参见本教程大约需要配置。
可以重命名定义要求
require(['common'], function () {
loadFonts();
});
我推荐使用map
,而不是paths
配置特定的模块位置。
paths
更意为快捷键/作为前缀,以简化/配置包括,而不是完整的模块路径。
记住:你需要将你想要一个星号(下全局应用映射*
的)键map
对象。
原因是你把require(['jquery']...
后立即加载require.js模块。其结果是,它会尝试加载['jquery']
读你的配置设置之前。
为什么它试图找到在jQuery的/javascript/jquery.js
? 那是因为你的data-main
属性。
RequireJS负载都相对于的baseUrl代码。 所述的baseUrl通常被设定为相同的目录中的数据主要属性用于顶层脚本加载用于页面的脚本。
此链接澄清require.js模块加载程序: http://requirejs.org/docs/api.html#jsfiles
我想你可以嵌入在需要块的完整URL。 喜欢:
require(['http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min'], function ($) {
//code
});
顺便说一句,你的jQuery的链接无效。