从CDN获取jQuery?

时间:2011-11-09 20:12:30

标签: javascript jquery cdn requirejs

我正在使用require JS并想知道使用CDN版本的jQuery的最佳方法。我听说1.7版本是“AMD”,应该有所帮助,但找不到直接的例子。希望一些RequireJS大师可以帮助我。

4 个答案:

答案 0 :(得分:45)

jQuery 1.7将自己注册为名为“jquery”的AMD模块,因此您需要使用路径config为'jquery'创建映射:

requirejs.config({
  paths: {
    'jquery' : 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min'
  }
});

require(['jquery'], function($) {
  //$ points to jQuery
});

但是请注意,RequireJS异步加载模块并且乱序,所以如果你想要使用的jQuery插件没有包含在define(['jquery'], function ($){ /* plugin code goes here */ });调用中,那么插件可以在jQuery之前执行装了。

请参阅require-jquery项目的自述文件,了解如何处理依赖于jQuery的文件,但不要将自己包装在define()个调用中。

答案 1 :(得分:9)

@ jrburke的回答对我不起作用。根据{{​​3}},您不应在路径中包含文件扩展名。所以这是工作代码:

requirejs.config({
    paths: {
        'jquery': 'https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min'
    }
});

require(['jquery'], function($) {
    //$ points to jQuery
});

我在jsfiddle上有一个工作示例: RequireJS api doc

答案 2 :(得分:3)

您可以将其作为模块的依赖项包含在内,但它有点不对劲。 e.g

define([
"order!http://code.jquery.com/jquery-1.7.min.js"
], function($) {
})

这有两个原因不太好

1)jquery文件本身不是模块,因此从函数中获取的$将不是jquery

2)order!插件与CDN版本的脚本不兼容。见Requirejs' order does not work with priority config and CDN dependencies

我还没有机会在“真正的”项目中使用它,因为我们尚未升级,但从我的测试中我发现最好的方法是在脚本标记中包含jquery,然后它非常适合作为模块的依赖。希望以下小样本会有所帮助:

<html>
<head>
    <title>Index2</title>
    <script src="../../scripts/libraries/jquery.js" type="text/javascript"></script>
    <script src="../../scripts/libraries/require.js" type="text/javascript"></script>
    <script type="text/javascript"">

        require(
            {baseUrl: 'scripts'}, 
            ['jquery'], 
            function (dollarSign) {
                console.log(dollarSign('div').html('hi'));
            });       
    </script>

</head>
<body>
    <div>

    </div>
</body>
</html>

答案 3 :(得分:2)

首先,建议对jQuery CDN使用Protocol-relative URL。 第二,如果CND死了,则使用带有CDN和本地位置的数组中的数组来加载本地文件。您可以使用所需数量的CDN网址。不要害怕,如果从CDN成功下载它,它不想从本地加载第二个文件。

requirejs.config({
  paths: {
    'jquery': ['//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min', 'lib/jquery-1.10.2.min']
  }
});