Requirejs错误 - 模块的加载超时:jquery

时间:2017-03-28 20:49:31

标签: javascript jquery requirejs

我有以下文件夹结构

index.html
scripts/
- app.js
- app/
-- main.js
-- page.js
- lib/  
-- require.js
-- jquery.min.js

index.html:

<head>
    <script data-main="scripts/app" src="scripts/lib/require.js"></script>
</head>

app.js:

requirejs.config({
    baseUrl: 'scripts/lib',
    paths: {
        app : '../app',
        jquery : 'jquery.min'
    },
    shim : {
        'jquery': {
            deps : ['app/page'],
            exports: '$'
        }
    }
});

requirejs(['app/main']);

main.js:

require(["app/page"], function(page){
    page.renderPage();
});

page.js:

define(['jquery'], function($) {
    return {
        renderPage : function() {
            //some code
        }
    }
});

加载index.html时,我在控制台中收到以下错误:

  

未捕获错误:模块加载超时:jquery   http://requirejs.org/docs/errors.html#timeout   在makeError(require.js:168)的checkLoaded(require.js:698)at require.js:719

我已经检查了很多相关问题并尝试了各种选项,但是无法使jquery与requirejs一起工作。我究竟做错了什么?

1 个答案:

答案 0 :(得分:0)

shim你不应该有jqueryshim配置选项仅适用于非实际AMD模块的脚本。 AMD模块通过调用define向模块加载器注册自己。 jQuery在很久以前就增加了将自己注册为AMD模块的支持,所以它本身就调用define。您可以在其源代码中看到它here

if ( typeof define === "function" && define.amd ) {
    define( "jquery", [], function() {
        return jQuery;
    } );
}

jQuery调用define,因此您不能为其设置shim

shim与AMD模块一起使用没有明确的含义。换句话说,当您尝试为AMD模块指定shim配置时,RequireJS不必符合任何特定行为。 RequireJS可能会忽略它,或者它可能表现不佳。