【问题标题】:RequireJS and text plugin Load timeout for modulesRequireJS 和文本插件模块的加载超时
【发布时间】:2012-01-24 19:43:29
【问题描述】:

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

之外的任何信息 未捕获的错误:模块的加载超时:文本 http://requirejs.org/docs/errors.html#timeout

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

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

【问题讨论】:

  • 您是否按照文档的建议将 txt 插件放置在正确的文件夹中?好像你的txt插件无法加载。
  • jupp,它与 main.js 在同一个文件夹中,我也尝试使用 require.conf 提供路径。将文本作为模块加载而不提供任何加载似乎也可以。
  • chrome 开发者工具是否会显示对网络选项卡上的文本插件发出的请求?

标签: jquery backbone.js underscore.js requirejs


【解决方案1】:

我猜这是路径问题。我有相同的设置(节点/快递和主干),它似乎对我有用。这是我的 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;
});

【讨论】:

  • 我的路径也是正确的,并且可以在浏览器中使用。但是,我在 wp7Phone 模拟器中遇到超时错误。
【解决方案2】:

由于它在您的 Windows Phone 上,请尝试将“waitSeconds”设置为更高的数字。

移动速度很慢,但默认情况下 require.js 会在 7 秒后超时,这对于移动体验/或互联网访问速度较慢的用户来说通常是很低的。

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

【讨论】:

    【解决方案3】:

    我原来的答案

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

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

    等待秒

    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 选项)
    • 配置中的双重输入

    有关此主题的更多信息,请查看顶部链接的原始答案。

    【讨论】:

      【解决方案4】:

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

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

      来自the documentation

      这会失败,因为 requirejs 需要确保加载并执行所有 调用上面的工厂函数之前的依赖项。如果一个 将依赖数组提供给define(),然后requirejs假设所有 依赖项列在该数组中,它不会扫描 其他依赖项的工厂函数。所以,要么不通过 依赖数组,或者如果使用依赖数组,列出所有 依赖关系。

      所以如果你指定一个依赖数组,你就不能同时依赖糖语法来工作。在我看来并不理想,但这就是 requirejs 的创建方式。

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2012-09-09
          • 1970-01-01
          • 2017-08-22
          • 1970-01-01
          • 2015-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多