无法用raven-js,如何直接使用TraceKit标准化错误字符串(一次有趣的探索)

news/2024/5/17 9:48:07

引子:网上三年前(2020)的文章介绍了一个raven-js 简单说就是把堆栈信息格式化兼容各浏览器,便于查看错误来源。

**but:**到处找了一下raven-js,已经没有官方出处了,只在Sentry的源码仓库里发现它已经被Sentry集成到@sentry/browser里面了:https://github.com/getsentry/sentry-javascript.git
sentry-javascript/docs/migration/v4-to-v5_v6.md
在这里插入图片描述
更重要的是:它的用法要在初始化时注入dsn,我们要的并不想跟着sentry服务器走呀,只想拿到堆栈信息格式化而已。

import Vue from 'vue'
import VueRaven from 'vue-raven'Vue.use(VueRaven, {dsn: 'https://<key>@sentry.io/<project>'
})

所以我们应该直接看raven-js的底层:raven-js使用TraceKit标准化错误字符串。
找这个TraceKit: https://www.npmjs.com/package/tracekit
安装方式还比较奇葩,不能和项目的pnpm兼容,所以新建个npm init -y项目去搞:
npm install bower -g
bower install tracekit

搞下来还以为是个很大的库,没想到核心就一个js文件,1000多行而已,不多。

比较麻烦的是它是umd写的:tracekit.js,省去中间:

(function(window, undefined) {
if (!window) {return;
}var TraceKit = {};
。。。// UMD export
if (typeof define === 'function' && define.amd) {define('TraceKit', [], TraceKit);
} else if (typeof module !== 'undefined' && module.exports && window.module !== module) {module.exports = TraceKit;
} else {window.TraceKit = TraceKit;
}}(typeof window !== 'undefined' ? window : global));

这个要直接在esm里面import进来源码中一起编译还是比较麻烦的(我写的是库,不能简单的把它丢html模板里直接引入,那样很简单我知道,但我要引入它和其他埋点库融合在一起) 从这篇文章得到一个线索: vite import umd,试了它说的两个插件,用@rollup/plugin-commonjs这个构建成功了:

1、新建项目,导入rollup、@rollup/plugin-node-resolve
2、rollup.config.mjs配置如下:

import cjs from "rollup-plugin-cjs-es";
export default {  input: ['src/tracekit.js'], // 你的主入口文件  output: {  dir: 'dist', // 输出目录  format: 'esm', // 输出格式,可以是 'amd', 'cjs', 'esm', 'iife', 'umd' 或 'system'  },  plugins: [  cjs({nested: true})],  
};

3、构建 npx rollup -c
4、dist下面的tracekit.js就是支持esm的了
5、把dist/tracekit.js拷贝到你项目的任何地方,导入

import { default as TraceKit } from '../libs/tracekit.js'

6、官方的例子不能用了,因为那个是劫持window.onerror等方法,并且得写个异步监听,我们要的是直接的把错误转成 标准化错误字符串 的。 这个只能拔代码了。幸运的是,我帮你拔完了,找到了这个方法可以转换:

TraceKit.computeStackTrace(error as Error)

error就是你捕获到的原生的js错误对象。


http://www.mrgr.cn/p/07070655

相关文章

【系统分析师】计算机网络

文章目录 1、TCP/IP协议族1.1 DHCP协议1.2 DNS协议1.3网络故障诊断 2、网路规划与设计2.1逻辑网络设计2.2物理网络设计2.3 分层设计 3、网络接入3.1 接入方式3.2 IPv6地址 4、综合布线技术5、物联网5.1物联网概念与分层5.2 物联网关键技术 6、云计算7、网络存储技术&#xff08…

网上订餐系统|基于springboot的网上订餐系统设计与实现(源码+数据库+文档)

网上订餐系统目录 目录 基于springboot的网上订餐系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户功能模块的实现 &#xff08;1&#xff09;用户注册界面 &#xff08;2&#xff09;用户登录界面 &#xff08;3&#xff09;菜品详情界面 &#xff08…

网站创建的流程是什么

网站的创建过程包括几个主要的步骤&#xff0c;其中涉及到一系列的决策和实践操作。下面我将详细介绍网站创建的流程&#xff0c;帮助读者了解如何创建一个成功的网站。 第一步&#xff1a;确定网站目标和功能 在创建网站之前&#xff0c;你需要明确自己网站的目标和功能。是用…

自动生成接口文档coreapi

drf-yasg只能用于drf 去看官方文档 2 coreapi pip install coreapi 2.1 配置路由 from rest_framework.documentation import include_docs_urlsurlpatterns = [...path(docs/, include_docs_urls(title=站点页面标题)) ]2.2 drf配置 #AttributeError: AutoSchema object has n…

OpenTelemetry入门看这一篇就够了

分布式跟踪可以帮助查看整个请求过程中服务之间的交互,并可以让我们深入了解系统中请求的整个生命周期。它帮助我们发现应用程序中的错误、瓶颈和性能问题。OpenTelemetry 可以用于从应用程序收集数据。它是一组工具、API 和 SDK 集合,我们可以使用它们来检测、生成、收集和导…

HTML5漫画风格个人介绍源码

源码介绍 HTML5漫画风格个人介绍源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 效果截图 源码下载 HTML5漫画风格…

Big Data and Cognitive Computing (IF=3.7) 计算机/大数据/人工智能期刊投稿

Special Issue: Artificial Cognitive Systems for Computer Vision 欢迎计算机/大数据/人工智能/计算机视觉相关工作的投稿&#xff01; 影响因子3.7&#xff0c;截止时间2024年12月31日 投稿咨询&#xff1a;lqyan18fudan.edu.cn 投稿网址&#xff1a;https://www.mdpi.com/j…

交换机丢包问题

一、测试丢包的方法二、丢包的类型链路丢包拥塞丢包MAC地址漂移STP震荡二三层表项超规格

linux查看mysql占用磁盘空间

linux查看mysql占用磁盘空间 1.通过ps -ef | grep mysql命令查看mysql相关信息,找出mysql的data目类:2.检查数据目录大小 du -sh /home/db_mysql/mysql

华为OD-C卷-攀登者1[100分]

攀登者喜欢寻找各种地图,并且尝试攀登到最高的山峰。 地图表示为一维数组,数组的索引代表水平位置,数组的元素代表相对海拔高度。其中数组元素0代表地面。 例如: [0,1,2,4,3,1,0,0,1,2,3,1,2,1,0],代表如下图所示的地图 地图中有两个山脉位置分别为 1,2,3,4,5 和 8,9,1…

6-01. Timeline 创建

创建 Intro Canvas注意,把 Intro Canvas 的 Sort Order 改为 10,确保可以完全遮盖其它物品 添加 PanelColor 改成 11102E新建 New Game Cutscene把文件放到 GameData / Timeline为了方便操作,可以把右上方改成秒 声音切割的办法在最后的时候添加关键帧,包括坐标、大小、是否…

6-02. 创建 Timeline 的对话

修改 NewGame Cutscene选择 Add Active Track 创建新场景创建 DialogBehaviour创建 DialogClip创建 DialogTrack修改 DialogBehaviour编辑 DialogClip 首先添加 DialogTrack,然后再 Add Dialog Clip可以把 Has To Pause 勾选一下 再添加一个 DialogClip修改 DialogBehaviour创…

记一次“XMR门罗币挖矿木马病毒”处置

记一次“XMR门罗币挖矿木马病毒”处置一、背景概述 故事的起因于26号下午做渗透测试时,登录跳板机发现CPU进程拉满到200%,qiao哥看了一眼直接说是XMR挖矿,这句话勾引起我的兴趣,由于应急是我的薄弱项也没有时间深入学习,所以有本篇应急分析文章。 市面上存在很多关于XMR门…

Java | Leetcode Java题解之第36题有效的数独

题目&#xff1a; 题解&#xff1a; class Solution {public boolean isValidSudoku(char[][] board) {int[][] rows new int[9][9];int[][] columns new int[9][9];int[][][] subboxes new int[3][3][9];for (int i 0; i < 9; i) {for (int j 0; j < 9; j) {char …

中电金信:2023银行年报分析——金融科技发展新格局(下篇)

​ ​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑​编辑 ​

电商技术揭秘二十八:安全与合规性保障

电商技术揭秘相关系列文章&#xff08;上&#xff09; 相关系列文章&#xff08;中&#xff09; 电商技术揭秘二十&#xff1a;能化供应链管理 电商技术揭秘二十一:智能仓储与物流优化(上) 电商技术揭秘二十二:智能仓储与物流优化(下) 电商技术揭秘二十三&#xff1a;智能…

Ubuntu部署有道QAnything(中间涉及到更换mysql容器端口)

系统配置版本:Ubuntu 20.04 有两块3090的显卡 下载相关文件首先下载源码,下载完成后解压得到QAnything-master文件夹 github下载地址:https://github.com/netease-youdao/qanything gitee下载地址:https://gitee.com/netease-youdao/QAnything?_from=gitee_search 下载emb…

B端系统:表单页设计全方位指南,超详细。

一、什么是表单页 B端系统表单页面是指面向企业或机构客户的系统中的表单页面。B端系统是指面向商业客户或机构的系统&#xff0c;与C端系统&#xff08;面向普通消费者的系统&#xff09;相对应。 在B端系统中&#xff0c;表单页面通常用于收集和处理企业或机构客户的信息。这…

实验一 球赛直播app

墨刀、Axure、Mockplus等原型设计工具优缺点分析: 一、墨刀 优点:在轻量级的移动端原型制作更加迅速,展示更加方便。 缺点:价格较贵,不能画流程图,相对于其他两款功能还不是很全面;应用局限性,专注于app原型设计,在后台和网页稍有乏力;归档能力不足,更倾向于链接、二…

DEV+GridControl实现反选

最近在使用Dev+Winform,看了很多资料都是些复制粘贴,可能作者也没实践过,自己就记录总结下,也特别简单 主要代码,/// <summary>/// 反选/// </summary>/// <param name="sender"></param>/// <param name="e"></par…