要求js加载速度慢以便为其他脚本全局注册jquery

时间:2014-07-18 09:55:28

标签: javascript jquery requirejs

我有一个应用程序包含在require中,需要将其放入现有页面中,该页面中已经包含一些使用jquery的脚本。 require app包括jquery:

<script type="text/javascript" src="/require.js" data-main="pathtomyscript"></script>
<script src="jquery-ui-1.8.20.min.js" type="text/javascript"></script>
<script src="jqueryplugin.js" type="text/javascript"></script>

据我所知,即使在AMD http://requirejs.org/docs/jquery.html

的背景下,jquery也将自身加载为全局

我遇到的问题是我的require app需要几秒钟才能加载到页面中,此时其他脚本(jquery ui等)已经运行了。 结果是一堆未捕获的ReferenceError:$未在控制台中定义错误。一旦我的需要应用程序加载,然后jQuery可用..但是为时已晚。

这有什么办法吗?

1 个答案:

答案 0 :(得分:1)

避免通过RequireJS和其他脚本(例如JQuery UI)通过<script>元素混合加载某些脚本(例如JQuery),因为最终会遇到排序问题,就像您遇到的因为依赖关系不是被指定。在这种情况下,我建议设置一个RequireJS垫片来表明JQuery UI和插件依赖于JQuery,并且需要这两个模块。

例如:

require.config({
    paths: {
        jquery: 'jquery-[version-you-are-using]',
        jqueryUi: 'jquery-ui-1.8.20.min',
    },
    shim: {
        jquery: { exports: '$' },
        jqueryUi: { deps: ['jquery'], exports: '$' },
        jqueryplugin: { deps: ['jquery'], exports: '$' },
    }
});

require(['jqueryUI', 'jqueryplugin'], function($) { /* ... */ });

或者,您可以采用在任何require'd模块之前加载与JQuery相关的脚本的方法。例如:

<script src="jquery-[version-you-are-using].js" type="text/javascript"></script>
<script src="jquery-ui-1.8.20.min.js" type="text/javascript"></script>
<script src="jqueryplugin.js" type="text/javascript"></script>
<script type="text/javascript" src="/require.js" data-main="pathtomyscript"></script>

使用此方法的常用方法是通过直接<script>引用加载所有外部/第三方脚本,而所有特定于应用程序的脚本都作为require'd模块加载。