理解requirejs路径
使用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包含在脚本调用的页面中
Common是网站的基本function,jquery doc ready函数等包含在define调用中:
define(['jquery'], function() { //jQuery dependant common code });
这很好用,从谷歌CDN加载jQuery并执行代码。 但是当我在加载main.js之后添加一个require调用时
require(['jquery'], function ($) { //code });
从/javascript/jquery.js请求jquery而不是google cdn的已定义路径。 我仍然是requirejs的新手,但在我看来,在任何其他请求被解雇之前应该定义路径,有人可以帮助我理解我做错了什么吗?
我认为这可能是因为在RequireJS脚本标记上使用了data-main
属性; 要解析它,RequireJS本身必须加载和解析。 在我的测试中(特别是对于IE9),在解析RequireJS配置文件( data-main
属性指定的文件)之前,浏览器将直接在RequireJS脚本标记之后下载并执行任何脚本标记。
为了解决这个问题,我只是退出使用data-main
属性,而是将配置文件直接放在RequireJS脚本标记之后作为普通脚本标记,现在一切似乎都很开心。
具体来说,这就是它的样子(使用你的样本):
也许你在需要js加载之前放置了config语句。
您应首先加载require.js,然后输入您的配置代码,然后调用require([‘jquery’],…);
它搜索/ javascript /的原因是因为你的require.js文件位于那里,它是默认的基本url。
您的配置可能永远不会被require.js使用。
请参阅本教程有关require config的信息。
您必须将define重命名为require
require(['common'], function () { loadFonts(); });
我建议使用map
而不是paths
来配置特定的模块位置。
paths
更多用于快捷方式/前缀以简化/配置包括,而不是完整的模块路径。
请记住:您需要在map
对象中的星号( *
)键下放置要全局应用的map
。
原因是你在加载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
我认为你可以在require块中嵌入完整的url。 喜欢:
require(['http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min'], function ($) { //code });
顺便说一下,你的jquery链接无效。