RequireJS:查找导致错误的脚本

17

我正在寻找一种优雅的方法来找出导致超时错误(即无法加载依赖项)的脚本的完整路径。

requirejs.onError = function (err) {

   // this works:
   var script_that_failed_loading = err.originalError.target.src

   // now I want:
   var the_script_responsible_for_this = <???>

};

这很酷,但是我只得到了requireJS的堆栈跟踪(trace),而且错误事件中根本没有关于实际失败脚本的任何提示。 - Theo.T
你最终解决了吗?我已经为此苦思了一个小时。呃。 - Joshua Ramirez
不好意思,我放弃了。 - Theo.T
2个回答

8
使用 加载器级别的错误回调函数
require(["foo","bar"],function(foo,bar){
  // perform some action
},function(error){
  // handle error here
});

请注意,失败的模块名称在error.requireModules中给出。这种错误回调可以用于加载器和模块。如果您对资源有多个回退路径,请使用路径回退

根据我的个人经验,我谦虚地不同意ddotsenko的看法。我们在生产环境中使用RequireJS。如果正确设置,RJS非常可靠。

那么您建议基本上按文件添加一个错误处理程序吗?这是您实际执行/推荐的操作吗? - Theo.T
我不相信ddotsenko实际上是反对Require本身,而是反对它的一些内部机制。我可以理解他的观点,但这并不妨碍我每天使用它。顺便说一下,你实际上可以在生产中使用Curl.JS(8K)与基于Require的代码一起加载你的压缩脚本。 - Theo.T
我认为如果你想要提供fallback机制,应该按文件处理AMD错误。如果你只关心错误通知,可以在全局层面上完成。虽然我们很少遇到大约40个模块的问题,但不知道你正在使用多少个模块。感谢提供有关Curl的更多信息。 - user2396441
1
为什么不使用全局 onError 函数呢?它公开了与本地回调相同的错误属性... - Zathrus Writer
这更多是关于你想在哪里编写“fallback”逻辑,使用全局的onError方法并没有任何错误。对我来说,与在单个地方为所有模块编写回退逻辑相比,在给定模块一起编写回退逻辑更有意义。显然,这更多是一个设计决策。 - user2396441

2
RequireJS选择了一种相对不可靠、不连贯的机制来捕获错误。它使用一个计时器来检查是否得到了预期结果。其他一些AMD加载器使用其他更直接的机制来在加载过程中检测错误条件。
我偏好的AMD加载器是CurlJS,它被硬编码为捕获加载/解析错误。
由于架构选择,它更可靠地检测错误条件,并且您可以直接将错误处理程序附加到每个require调用。如果像错误捕捉这样的东西对您很重要,我强烈建议看看CurlJS。

你是在暗示这不可能吗?我认为他更想要的不是错误处理,而是诊断哪个脚本破坏了对象图加载。 - Joshua Ramirez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接