RequireJS和文本插件加载模块的超时

时间:2011-12-20 21:37:57

标签: jquery backbone.js underscore.js requirejs

我在使RequireJS文本插件工作时遇到了一些问题。这可能是一个与路径相关的问题(或类似的东西),但我无法解决它,因为Chrome控制台(xhr打开)和firebug都没有给我任何信息

Uncaught Error: Load timeout for modules: text 
http://requirejs.org/docs/errors.html#timeout

我很确定路径没问题,但我找不到任何其他解释。有人知道如何调试这个吗?

我在服务器端使用node.js表达,在客户端使用主干和jQuery。所有这些都可以通过RequireJS正确加载。

5 个答案:

答案 0 :(得分:3)

我猜这是一个路径问题。我有相同的设置(节点/快速和主干),它似乎对我有用。这是我的main.js文件:

require.config({
  paths: {
    jquery: 'libs/jquery-1.7.1.min',
    underscore: 'libs/underscore',
    backbone: 'libs/backbone',
    text: 'libs/text',
    templates: '../views',
    persist: 'libs/persist/persist'
  }
});
require([
  'app'
], function(App){
  App.initialize();
});

以下是我在模块中调用插件的方法:

define([
  'jquery',
  'underscore',
  'backbone',
  'collections/sub_elements',
  'collections/elements',
  'views/element',
  'text!../../../views/partials/_elements.html'
], function($, _, Backbone, sub_elementsCollection, collection, view,     template){

  var elementsView = Backbone.View.extend({
    // ... //
  });

  return elementsView;
});

答案 1 :(得分:1)

就像在Windows手机上一样,尝试将“waitSeconds”设置为更高的数字。

移动速度很慢,但默认情况下,在7秒后,require.js会超时,这通常会降低移动体验/用户访问速度慢的用户。

doc:http://requirejs.org/docs/api.html#config-waitSeconds

答案 2 :(得分:1)

我的原始答案

I answered a similar question here指向官方require.js troubleshooting pages

在我的情况下,只有当Chrome上的开发者控制台打开时,才会在单个macbook上为多个chrome版本发生此错误。其他设备没有显示问题。因此我可以通过更改该单台计算机上的配置来实现。

waitSeconds

waitSeconds option可以配置为无限(0)或您想要的任何值(以秒为单位)。默认值为7秒。示例配置:

<script src="scripts/require.js"></script>
<script>
  require.config({
    baseUrl: "/another/path",
    paths: {
      "some": "some/v1.0"
    },
    waitSeconds: 0
  });
  require( ["some/module", "my/module", "a.js", "b.js"],
    function(someModule,    myModule) {
      //This function will be called when all the dependencies
      //listed above are loaded. Note that this function could
      //be called before the page is loaded.
      //This callback is optional.
    }
  );
</script> 

由于无限(0)禁用超时,我不建议将此选项用于生产代码!如果遇到此问题,在任何地方运行代码或禁用超时都无济于事,请继续阅读。

此问题的3个常见原因

  • 您正在加载的模块中的错误
  • 配置中的错误路径(选中pathsbaseUrl选项)
  • 配置中的双重输入

有关此主题的更多信息,请查看最常见的原始答案。

答案 3 :(得分:0)

错误地使用syntax sugar时出现此错误。 您不能同时定义依赖关系并使用require工厂函数。

//THIS WILL FAIL
define(['require'], function (require) {
    var namedModule = require('name');
});

来自the documentation

  

这会失败,因为requirejs需要确保加载并执行所有操作   在调用上面的工厂函数之前的依赖关系。如果一个   依赖数组赋予define(),然后requirejs假定全部   依赖项列在该数组中,它不会扫描   其他依赖项的工厂函数。所以,要不要传入   依赖项数组,或者如果使用依赖项数组,则列出所有   依赖于它。

因此,如果指定依赖关系数组,则不能依赖于糖语法。在我看来并不理想,但这就是如何创建requirejs来运作。

答案 4 :(得分:0)

Require.js请求了我的text.js文件,但响应为302-我的用户未通过身份验证。因此,无法加载text插件。因此,我所有的文本资源均无法加载:text!any/name.html

我的控制台给了我一条相关消息,提示我的text插件无法加载:

  

无法读取未定义的属性“规范化”