RequireJS:如何处理传递依赖项失败?

RequireJS: How can I handle transitive dependencies failures?

我使用的是 RequireJS 2.1.15,我无法获取传递给要执行的库的 errback。这是一个说明我的问题的小样本。

define("parent", ["missing"], function(){
    return new Parent();
});

require(["parent"], function(parent){ 
    alert("parent");
}, function(err){
    alert("err");
});

(对应 fiddle 处:http://jsfiddle.net/605w0ex5/2/

当我 运行 这段代码时, require() 的成功或错误函数的 none 实际上最终被调用,但是 RequireJS 打印一条控制台消息说 Error: Script error for: missing .

我的问题是我的 require() 呼叫似乎处于不确定状态。它既不成功也不失败,即使它明确依赖的模块之一永远不会被加载。而且永远不会加载父级,因为无法加载所依赖的模块。

问题是当我的 require() 呼叫无法满足时,我确实希望得到通知。 如何让 RequireJS 真正调用我的 errback?*

我在 Chrome 39 和 RequireJS 2.1.15 上遇到了这个问题。

我准备将其称为 RequireJS 中的错误,因为 a) 我们在 FF 中获得了预期的行为,并且 b) 如果我们执行以下操作,我们也获得了预期的行为。

我所做的是获取您的代码并创建一个 HTML 页面:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8"/>
    <script type="text/javascript" src="js/require.js"></script>
  </head>
  <body>
    <script>
      require.config({
        baseUrl: "js"
      });
      require(["parent"], function(parent){
        alert("parent");
      }, function(err){
        console.log(err);
        alert("err");
      });
    </script>
  </body>
</html>

js 子目录包含 RequireJS 和一个名为 parent.js 的文件,其中包含:

define(["missing"], function(){

function Parent () {}
return new Parent();

});

使用此设置,将按预期调用 errback。我还可以将模块的名称添加到 define 中,它也适用于此。但是如果 parent 模块是像你一样创建的,那么 errback 永远不会被调用。

另一件让我愿意称它为错误的事情是,在我的一个大型应用程序中,我依赖错误反馈来正确加载模块。该应用程序在多个操作系统上的多个版本的 FF、IE、Chrome 中进行了测试,并且可以正常工作。 (而且我使用它未优化并使用 r.js 进行了优化。) 唯一我不做的事 你的代码所做的是在单个文件之外定义一个模块。