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

Requirejs error - Load timeout for modules: jquery

我有以下文件夹结构

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 时,我在控制台中收到以下错误:

Uncaught Error: Load timeout for modules: jquery http://requirejs.org/docs/errors.html#timeout at makeError (require.js:168) at checkLoaded (require.js:698) at require.js:719

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

jquery 不应该有 shimshim 配置选项仅适用于不是实际 AMD 模块的脚本。 AMD 模块通过调用 define 向模块加载器注册自己。 jQuery很早以前就添加了支持注册自己为AMD模块,所以自己调用define。你可以在它的源代码中看到它here

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

jQuery 调用 define 所以你不能为它设置 shim

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