【问题标题】:RequireJS plugin: load timeouts experienced when using pluginRequireJS插件:使用插件时遇到的加载超时
【发布时间】:2013-09-14 01:59:55
【问题描述】:

使用 RequireJS 我正在构建一个广泛使用小部件的应用程序。对于每个小部件,我至少有 3 个单独的文件:

  • request.js 包含用于设置请求/响应处理程序以在我的应用程序的另一部分请求小部件的代码
  • controller.js 包含模型和视图之间的处理
  • view.js 包含用户和控制器之间的处理

request.js 中的模块定义:

define(['common/view/widget/entity/term/list/table/controller'],
function(WidgetController) { ... });

controller.js 中的模块定义:

define(['common/view/widget/entity/term/list/table/view'],
function(WidgetView) { ... });

view.js 的模块定义为:

define(['module','require'],function(module,require) {

'use strict';

var WidgetView = <constructor definition>;

    return WidgetView;
});

在我开发的小部件的情况下,我有很多上述的小情况。我不喜欢的是每次当一个模块需要另一个模块并且两者都位于同一个文件夹中时使用完整路径。我想简单地指定如下(假设我们有一个 RequireJS 插件可以为我们解决这个问题):

define(['currentfolder!controller'],
function(WidgetController) { ... });

为此,我写了一个小插件,因为我在网上找不到它:

define({
    load: function (name, parentRequire, onload, config) {

        var path = parentRequire.toUrl('.').substring(config.baseUrl.length) + '/' + name;

        parentRequire([path], function (value) {
            onload(value);
        });
    }
});

您可能会注意到,它的基本形式类似于 RequireJS 插件文档的示例。

现在在某些情况下,上述工作正常(例如从 request.js 到 controller.js),但在其他情况下会发生加载超时(从 controller.js 到 view.js)。当我查看生成的路径时,都是正确的 RequireJS 路径。查看加载超时,记录以下内容:

Timestamp: 13-09-13 17:27:10
Error: Error: Load timeout for modules: currentfolder!view_unnormalized2,currentfolder!view
http://requirejs.org/docs/errors.html#timeout
Source File: http://localhost/app/vendor/requirejs/require.js?msv15z
Line: 159

上面的日志来自一个测试,我只使用定义语句中模块列表中的 currentfolder!view 从 controller.js 加载 view.js。由于我只请求了一次 currentfolder!view,我很困惑为什么我在消息中都看到 currentfolder!view_unnormalized2 和 currentfolder!view。

知道为什么会发生这种情况吗?

【问题讨论】:

  • BTW _unnormalized&lt;id&gt; 是当模块返回 404 时的预期日志,因为 Require.js 处理内部加载的方式。检查 network 窗格以查看请求是如何结束的(404 或任何内容)
  • 没有 404,因为根本没有请求,但你的其他回答对我来说已经足够了。

标签: javascript requirejs


【解决方案1】:

我的回答可能无法回答你的主要问题,但它会帮助你实现你想要用你的插件做的事情。

事实上,Require.js 在使用 CommonJS 样式时支持需要模块的相对路径。像这样:

define(function( require, exports, module ) {
  var relativeModule = require("./subfolder/module");

  module.exports = function() {
    console.log( relativeModule );
  };
});

【讨论】:

  • 太棒了。我已经对此进行了实验,但我无法让它正常工作。我是 RequireJS 的新手,所以我想这是一个适当的 RTFM 案例。这对我有用!
猜你喜欢
  • 2012-01-24
  • 2014-08-06
  • 1970-01-01
  • 2015-04-21
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多