RequireJS 插件:使用插件时遇到的加载超时

RequireJS plugin: load timeouts experienced when using plugin

本文关键字:插件 加载 超时 遇到 RequireJS      更新时间:2023-09-26

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

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

请求中的模块定义.js:

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

控制器中的模块定义.js:

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

视图.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 插件文档的示例。

现在在某些情况下,上述工作正常(例如,从请求.js到控制器.js),但在其他情况下,会发生加载超时(从控制器.js到查看.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

上面的日志来自我所做的测试.js仅从控制器加载视图.js在定义语句的模块列表中使用 currentfolder!view。由于我只请求了一次当前文件夹!view,我很困惑为什么我在消息中看到当前文件夹!view_unnormalized2和当前文件夹!view。

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

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

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

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