针对jQuery的RequireJS配置

时间:2012-03-22 20:49:33

标签: requirejs

我正在尝试将RequireJS配置为从我的网站上的其他文件夹加载jQuery,而不是其他所有文件夹中的/Scripts文件夹。我正在看Fiddler的页面加载,我总是看到jQuery请求是/Scripts/jquery.js而不是正确的URL。

在我的标记中,我有这个:

<script src="@Url.Content("~/Scripts/require.js")" type="text/javascript" data-main="@Url.Content("~/Scripts/main")"></script>

/Scripts/main.js我有这个:

require.config({
    waitSeconds: 10,
    paths: {
        "jquery": "/N2/Resources/Js/jquery-1.7",
        "modernizr": "modernizr-2.0.6-development-only"
    }
});

require(["jquery", "jquery.utility", "jquery.link-decorators", "jquery.google-analytics", "accessibility", "modernizr"], function ($) {

... omitted

});

在Fiddler中,我看到了正确的modernizr请求,但jQuery的请求是/Scripts/jquery.js

作为测试,我将我的modernizr行改为"modernizr" : "/N2/Resources/Js/modernizr-2.0.6-development-only",我看到该资源的请求(当然它返回404)。所以我知道RequireJS会看到我的配置,并正在处理它。

注意:我知道在RequireJS中处理jQuery的各种方法。我的所有插件都定义了模块,因此无序加载不会成为问题。我正在使用支持AMD的jQuery 1.7。

1 个答案:

答案 0 :(得分:3)

我明白了。在我页面正文的标记中,我有

<script type="text/javascript">
require(["jquery", "Rotator"], function ($, Rotator) {
    $(document).ready(function () {
        var homeRotator = new Rotator();
        homeRotator.initialize($('#home-rotator ul.rotator-content li'), { viewTime: 30000, transitionTime: 2500 });
    });
});

这是导致/Scripts/jquery请求的原因。 Rotator模块取决于jquery。如果我在此处删除jquery依赖项,则页面会正确加载。问题似乎是我将require.config设置放入main.jsrequire.jsmain.js异步加载。在加载<script/>之前,会在正文中遇到上面的脚本,因此对jQuery的请求会转到默认位置,而不是配置的位置。

我将配置设置移到页眉中的{{1}}标记中,现在它正在运行。