理解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链接无效。