为什么Raven.js/Sentry说jQuery没有定义

ami*_*mik 9 jquery sentry raven

我在Sentry中遇到很多错误,说"ReferenceError:jQuery未定义",但与页面加载总数相比,它仍然很少发生.

<script src="/js/compiled/jquery.min-2fe08f7.js" defer></script>
<script src="/js/my-script-e6f35a4.js" defer></script>
Run Code Online (Sandbox Code Playgroud)

my-script.js的位置如下:

(function($) {
    $('h1').text('Hello world');
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

但是我从Sentry报告中找不到为什么没有加载jQuery的线索.

Sentry面包屑中给出的唯一线索是无用的:

12:15:25 sentry ReferenceError: jQuery is not defined
12:15:25 sentry ReferenceError: jQuery is not defined
12:15:26 exception ReferenceError: jQuery is not defined
Run Code Online (Sandbox Code Playgroud)

延迟脚本应按它们在文档中的顺序加载,因此我不认为问题出在异步加载中.

也许jQuery文件在一些慢速设备上加载超时?或者某个时刻服务器上的文件不可用?

这种情况发生在各种JS文件中,也有各种依赖项,而不仅仅是jQuery.任何人都可以告诉我如何正确解决这样的问题,或者至少获得完整的控制台输出到Sentry,包括失败的HTTP子请求到资源,如JS文件,找出实际原因是什么?

提前致谢.

小智 0

您希望将代码包装在事件处理程序中,该事件处理程序仅在整个 DOM 准备就绪后才触发,以便保证在加载所有延迟脚本后运行。

通常,如果 jQuery 可用,这将是一个$(document).ready()调用,但由于不能保证这一点,我建议在您的my-script.js文件中执行类似的操作

document.addEventListener("DOMContentLoaded", function(event) {
   (function($) {
     $('h1').text('Hello world');
   })(jQuery);
});
Run Code Online (Sandbox Code Playgroud)