如何在加载主要JS捆绑包之前加载Sentry?

问题描述 投票:0回答:1

我使用Sentry跟踪客户端错误。但是,我今天在Edge浏览器中加载了Web应用程序,但是却找不到空白页。 Edge提出了TextEncoder is not defined错误,因为我捆绑包中的一个库引用了它不支持的TextEncoder。 Sentry未报告该错误,因为该错误在初始化Sentry之前发生。

我使用vue-cli创建一个Vue项目,并在主文件顶部附近初始化了Sentry:

import { init } from '@sentry/browser';
import { environment } from '@/constants';
import { Vue as VueIntegration } from '@sentry/integrations';

export default function(Vue) {
  const debug = environment !== 'production';

  init({
    dsn: 'redacted',
    environment,
    debug,
    integrations: [new VueIntegration({ Vue, logErrors: debug })],
  });
}

我一直在考虑使用<body>标签开头附近的脚本标签手动初始化Sentry。但是,我使用VueIntegration插件的事实使事情变得复杂。初始化Sentry两次是否安全?一次在主捆绑包加载之前,一次像在上面的示例中一样?

[我注意到文档中有关于managing multiple Sentry clients的内容,但是我不确定这是否与我的具体情况有关。

[我的一个想法只是在加载其他任何东西之前只是一个准系统window.onerror钩子,但是我不确定在不拉入@sentry/browser程序包的情况下如何与Sentry进行交互。理想情况下,我只使用一个简单的XHR请求和我的DSN与他们的服务进行通信。

我的问题是推荐哪种方法来跟踪在主要JS软件包中初始化Sentry之前发生的错误?] >>>

我使用Sentry跟踪客户端错误。但是,我今天在Edge浏览器中加载了Web应用程序,但是却找不到空白页。 Edge引发了TextEncoder未定义错误,因为其中一个库...

vue.js webpack vue-cli sentry
1个回答
1
投票

我最终通过添加准系统window.onerror挂钩解决了这个问题,该挂钩在主捆绑包到达之前内联加载。该错误会立即发送到我们的API,然后发送到我们的Slack #alerts渠道。我添加了速率限制,因此人们不会滥用它(太多)。

index.html(由vue-cli生成,但新脚本标记除外):

© www.soinside.com 2019 - 2024. All rights reserved.