Javascript 理解requirejs路径

Javascript 理解requirejs路径,javascript,jquery,requirejs,Javascript,Jquery,Requirejs,使用requirejs my 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' }, waitSecon

使用requirejs my 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从GoogleCDN加载并执行代码。但是当我在加载main.js之后添加require调用时

<script data-main="/javascript/main.js" src="/javascript/require-2.0.1.js"></script>
require(['jquery'], function ($) {
    //code
});

require(['jquery'],函数($){
//代码
});

jquery是从/javascript/jquery.js请求的,而不是从定义的google cdn路径请求的。我仍然是requirejs的新手,但在我看来,应该在触发任何其他请求之前定义路径,有人能帮我理解我做错了什么吗?

我想你可以在require块中嵌入完整的url。比如:

require(['http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min'], function ($) {
   //code
});

顺便说一句,您的jquery链接无效

也许您在需要加载js之前先放置config语句

您应该首先加载require.js,将配置代码放在后面,然后调用require(['jquery'],…)

它搜索/javascript/的原因是您的require.js文件位于那里,并且它是默认的基本url

require.js可能永远不会使用您的配置


请参阅关于require config。

我认为这可能是由于在RequireJS脚本标记上使用了
data main
属性;要对其进行解析,必须加载并解析RequireJS本身。在我的测试中(特别是针对IE9),浏览器将在解析RequireJS配置文件(由
data main
属性指定的文件)之前直接下载并执行RequireJS脚本标记后面的任何脚本标记

为了解决这个问题,我只需停止使用
datamain
属性,而是将配置文件作为一个普通的脚本标记直接放在RequireJS脚本标记之后,现在一切似乎都很好

具体来说,这就是它的外观(使用您的示例):


您必须重命名define以满足需要

require(['common'], function () {
    loadFonts();
});
我建议使用而不是
路径
来配置特定的模块位置

路径
更多用于快捷方式/前缀,以简化/配置包含,而不是完整的模块路径


请记住:您需要将要全局应用的映射放置在
*
对象中的星号(
*
)下。

原因是您在加载require.js模块后立即放置
require(['jquery']…
),因此,它会在读取配置设置之前尝试加载
['jquery']

为什么它试图在
/javascript/jquery.js
中查找jquery?这是因为您的
数据main
属性

RequireJS加载与baseUrl相关的所有代码 通常设置为与数据主目录中使用的脚本相同的目录 为页面加载的顶级脚本的属性

此链接说明require.js模块加载过程:

我可以,但jQuery将自身定义为amd模块,因此我应该能够使用“jQuery”,而不是每次都必须写入整个url。为什么jQuery链接无效?您好,我尝试访问
http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min
找到了404。很抱歉,我忘了在脚本中添加requirejs appends.jsu所有模块都是脚本。您的链接是正确的。很抱歉造成混淆。在浪费了一个多小时之后,我也放弃了
data main
。使用双脚本方法消除了我的定义加载错误。TYVM!
<script src="/javascript/require-2.0.1.js"></script>
<script src="/javascript/main.js"></script>
require(['common'], function () {
    loadFonts();
});