【问题标题】:Require.js load timeout for jquery/underscore/backbone/parse modulesjquery/underscore/backbone/parse 模块的 Require.js 加载超时
【发布时间】:2012-06-05 18:25:28
【问题描述】:

未捕获的错误:模块加载超时:order!libs/jquery/jquery-min order!libs/underscore/underscore-min order!libs/parse/parse-min 库/jquery/jquery-min 库/下划线/下划线-min libs/parse/parse-min 主干 http://requirejs.org/docs/errors.html#timeout

我在 Chrome 的“网络”选项卡下没有 404 请求,也没有脚本错误,因此我不属于该问题的常见错误/修复(根据 requirejs.org)。

当我查看我的网络时,我看到脚本按以下顺序加载:

require.js
main.js
app.js <-- required by main.js
order.js <-- used in main.js to require the next 4 scripts (which aren't AMD)
jquery-min.js <-- required by main.js
underscore-min.js <-- required by main.js
backbone-min.js <-- required by main.js
parse-min.js <-- required by main.js
router.js
login.js
text.js

这对我来说似乎是正确的。下面是main.jsapp.jsrouter.js 的代码。

main.js:

// Author: Thomas Davis <thomasalwyndavis@gmail.com>
// Filename: main.js

// Require.js allows us to configure shortcut alias
// Their usage will become more apparent futher along in the tutorial.
require.config( {
    paths : {
        jQuery : 'libs/jquery/jquery-min',
        Underscore : 'libs/underscore/underscore-min',
        Backbone : 'libs/backbone/backbone-min',
        Parse : 'libs/parse/parse-min',
        templates : '../templates'
    }
});

require( [
    // Load our app module and pass it to our definition function
    'app',

    // Some plugins have to be loaded in order due to their non AMD compliance
    // Because these scripts are not "modules" they do not pass any values to the
    // definition function below
    'order!libs/jquery/jquery-min',
    'order!libs/underscore/underscore-min',
    'order!libs/backbone/backbone-min',
    'order!libs/parse/parse-min'
],
function(App) {
    // The "app" dependency is passed in as "App"
    // Again, the other dependencies passed in are not "AMD" therefore
    // don't pass a parameter to this function
    App.initialize();
});

app.js:

// Filename: app.js
define( [ 'jQuery', 'Underscore', 'Parse', 'router' ],
function($, _, Parse, Router) {
    var initialize = function() {

        Parse.$ = $;

        // Initialize Parse with your Parse application javascript keys
        Parse.initialize("HIDDEN", "ALSO HIDDEN");

        // Pass in our Router module and call it's initialize function
        Router.initialize();
    };

    return {
        initialize : initialize
    };
});

router.js:

// Filename: router.js
define( [ 'jQuery', 'Underscore', 'Backbone', 'Parse', 'views/home/login', ],
function($, _, Backbone, Parse, loginView) {
    var AppRouter = Backbone.Router.extend( {
        routes : {
            // Default
            '*actions' : 'defaultAction'
        },
        defaultAction : function(actions) {
            // We have no matching route, lets display the home page
            loginView.render();
        }
    });

    var initialize = function() {
        var app_router = new AppRouter;
        Backbone.history.start();
    };
    return {
        initialize : initialize
    };
});

【问题讨论】:

    标签: javascript backbone.js requirejs router


    【解决方案1】:

    尝试使用 requirejs-jquery。它的 requirejs 版本已准备好与 jquery 一起使用并尝试使用 shim 配置。

    查看此链接:https://github.com/jrburke/require-jquery

    Shim 配置示例:

    require.config({
      paths: {
        "jqueryUI": "libs/jquery-ui",
        "jquery": "libs/jquery-1.9.1",
        "underscore": "libs/underscore-min",
        "backbone": "libs/backbone-min"
      },
      shim: {
        jqueryUI:{
             deps: ["jquery"],
             exports:"$"
        },
        underscore: {
          exports: "_"
        },
        backbone: {
          deps: ["underscore", "jquery"],
          exports: "Backbone"
        }
      }
    
    });
    

    【讨论】:

      【解决方案2】:

      我刚刚发布了一个开源工具包,可以帮助解决此类问题。它是许多开源工具的组合,可为您提供开箱即用的 requirejs 主干应用程序。

      它提供单个命令来运行:dev web server、jasmine 单浏览器测试运行器、jasmine js-test-driver 多浏览器测试运行器,以及 JavaScript 和 CSS 的连接/缩小。它还输出应用的未缩小版本以进行生产调试,预编译您的车把模板,并支持国际化。

      无需设置。它只是工作。

      http://github.com/davidjnelson/agilejs

      【讨论】:

        【解决方案3】:

        我切换到在我的main.js 和我的index.html 之外加载 JS 文件:

        <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.3/underscore-min.js"></script>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
        <script type="text/javascript" src="http://www.parsecdn.com/js/parse-1.0.0.min.js"></script>
        <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.2/backbone-min.js"></script>
        <script data-main="js/main" src="js/libs/require/require.js"></script>
        

        【讨论】:

        • 我知道这对你有用,但它不再使用 requireJS 来加载模块,所以它并没有真正回答问题......
        • 这与 AMD 的原则相违背。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-07
        • 1970-01-01
        • 2015-02-07
        • 2013-01-21
        • 1970-01-01
        • 2012-04-19
        • 1970-01-01
        相关资源
        最近更新 更多