sourcemap使用

news2024/11/6 5:09:07

  sourcemap是什么以及怎么生成就不过多阐述了,这是之前看到的一篇文章感觉介绍的很详细:弄懂 SourceMap,前端开发提效 100%

浏览器加载sourcemap

  我们线上代码一般不会开启sourcemap,在排查线上的问题时,可以通过浏览器自带的能力加载sourcemap在这里插入图片描述

自建sourcemap服务

  在某些情况下我们没办法直接用浏览器加载sourcemap来使用,比如我们的监控平台捕获到了错误栈,但是页面不能复现,只能通过日志的相关信息来排查,此时便需要自建的sourcemap解析服务来处理了。我们可以通过source-map这个包处理。

/**
* 如其名, 用来消费sourcemap
*/
const {SourceMapConsumer} = require('source-map')
const fs = require('fs');
const path = require('path');

// 错误行
const LINE  = 1;
// 错误列
const COLUMN = 205;
// sourcemap文件路径
const ORIGIN_FILE_PATH = path.join(__dirname,'./sourcemap.js.map');
// sourcemap文件内容
const ORIGIN_FILE_CONTENT = fs.readFileSync(ORIGIN_FILE_PATH, 'utf-8');

/**
 * 解析Source Map文件
 * 通过文件读取的方式, 将sourcemap文件传入
 */
SourceMapConsumer.with(ORIGIN_FILE_CONTENT, null, consumer => {
    /**
     * originalPositionFor
     * 传入编译后文件的位置信息
     * 得到对应的源码位置信息
     */
  const originalPosition = consumer.originalPositionFor({
    source : fs.readFileSync(path.join(__dirname,'./sourcecode.js'), 'utf-8'),
    // 举例: 报错堆栈信息为, test.js:40:57515
    line: LINE,
    column: COLUMN
  });

  /**
   * originalPosition是一个对象, 包含定位到的
   * 源代码文件位置
   * 和具体定位的行列信息等
   */
  console.log('originalPosition:',originalPosition);

  /**
   * sourceContentFor 通过解析出的路径
   * 得到源代码的文本信息
   */
  const content = consumer.sourceContentFor(consumer.sources.find(source => source === originalPosition.source));

  /**
   * content就是对应的源代码的原始文本了
   */
  console.log('原始代码:',content);

  function getLineByIndex(str, lineIndex) {
    const lines = str.split(/\r?\n/); // 使用正则表达式兼容所有平台
    if (lineIndex >= 0 && lineIndex < lines.length) {
        return lines[lineIndex];
    } else {
        throw new Error("行索引超出范围");
    }
  }

  const errorLine = getLineByIndex(content, originalPosition.line - 1);
  console.log('具体报错行代码:',errorLine);

});

输出效果
在这里插入图片描述
根据上述信息, 我们可以扩展出一个功能更完善的工具
比如在团队内部部署一个微型服务, 自助上传souremap, 输入报错信息, 然后打印出具体的错误,还可以做报错代码的高亮展示等优化,更进一步地, 可以跟git直接关联起来, 导航到具体的报错文件, 更加直观。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1991206.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

信创安全 | 新一代内网安全方案—零信任沙盒

在当今数字化时代&#xff0c;访问安全和数据安全成为企业面临的重要挑战。传统的边界防御已经无法满足日益复杂的内网办公环境&#xff0c;层出不穷的攻击手段已经让市场单一的防御手段黔驴技穷。当企业面临越来越复杂的网络威胁和数据泄密风险时&#xff0c;更需要一种综合的…

S4 HANA标准现金流量表(IDCNCASH、J3RKKRS、J3RKKRD)

文章目录 一、概述二、配置2.1、路径2.2、说明事项2.3、现金流项目及会计科目 一、概述 传统输出现金流量表步骤&#xff08;直接法现金流表&#xff09;&#xff1a; 定义现金流变动相关的原因代码&#xff08;Reason Code&#xff09;&#xff1b;过账凭证里指定对应的原因…

python开发上位机 - PyCharm环境搭建、安装PyQt5及工具

目录 简介&#xff1a; 一、安装PyCharm 1、下载 PyCharm 2、PyCharm安装 1&#xff09;配置安装目录 2&#xff09;安装选项 3、问题及解决方法 二、安装PyQt5 1、打开 Pycharm&#xff0c;新建 Project 2、安装 pyqt5 3、安装很慢怎么办&#xff1f; 4、安装 pyq…

数据库规范化设计 5大基本原则

规范化设计原则是数据库设计的基本原则&#xff0c;有助于减少数据冗余&#xff0c;提高数据一致性和完整性&#xff0c;简化数据管理&#xff0c;增强数据安全性&#xff0c;对整个开发项目至关重要。而缺乏规范化设计会导致数据冗余&#xff0c;增加存储成本&#xff0c;引发…

【视频编码】调用x264库文件实现编码

调用x264库文件实现编码 整理前面记录的文章时发现还没有记录过如何实际操作x264编码器实现编码的功能&#xff0c;过去是通过FFmpeg调用libx264的接口来实现编码功能&#xff0c;这里记录一下直接调用x264的接口来实现编码的功能&#xff0c;同时存储编码之后的码流和重建的yu…

线上预约陪诊平台医院陪诊系统源码就医陪护小程序APP开发

项目分析 随着医疗行业的数字化转型和人们对健康需求的日益增长&#xff0c;线上预约陪诊系统作为一种新兴的医疗服务模式&#xff0c;正逐渐受到市场的关注和认可。本文将从市场前景、使用人群、盈利模式以及竞品分析等多个角度&#xff0c;全面探讨线上预约陪诊系统的技术性…

Windows长文件名支持

Windows 长文件名支持 &#x1f354;打开注册表&#x1f957;激活 &#x1f354;打开注册表 &#x1f957;激活 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem双击进入编辑模式 把0改成1&#xff0c;确定

【高校主办 | 快录用,稳定EI检索 !ACM独立出版】2024智能物联与计算国际学术会议(AITC 2024,8月30-9月1)

为探讨智能物联与计算技术所涉领域的最新研究和发展趋势&#xff0c;2024智能物联与计算学术大会&#xff08;AITC 2024&#xff09;将于2024年8月30日-9月1日在中国 贵阳举行。 AITC 2024由中国计算机学会、中国人工智能学会、浙江省科学技术协会、浙江工业大学、浙江省人工智…

Moba案例帧同步

1.设置环境光 2.搭建客户端框架 a.对上述的模块基类&#xff08;都是单例类&#xff0c;都有初始化方法&#xff09; b.隐藏登录页面&#xff08;得到Canvas的子对象失活&#xff09; c.设置根对象过场景不被移除 tip&#xff1a;模块都是继承mono的&#xff0c;不能直接ne…

AI写作进阶 运用思维链CoT让AI写出来的东西更有“人味儿“

嗨&#xff0c;大家好&#xff0c;我是大象。 AI 写作今年可谓是大放光芒&#xff0c;从年初的 AI 自动摘要生成工具到年中的 AI 情感分析引擎&#xff0c;再到现在备受推崇的 AI 故事创作助手&#xff0c;一次次让 AI 写作成为众人热议的焦点。 大家惊叹 AI 写作的神奇能力&am…

DockerCompose中使用自定义网络的方式实现部署SpringBoot+Mysql+Redis

场景 Docker中Docker网络-理解Docker0与自定义网络的使用示例&#xff1a; Docker中Docker网络-理解Docker0与自定义网络的使用示例_docker 配置 docker0-CSDN博客 Docker中使用自定义网络方式实现Redis集群部署与测试流程&#xff1a; Docker中使用自定义网络方式实现Redi…

【工具测评】腾讯云 AI 代码助手——你的下一位编码“伙伴”

文章目录 引言一、VS Code下安装腾讯云 AI 代码助手插件二、腾讯云AI代码助手使用实例2.1 通过对话生成代码2.2 通过注释生成代码2.3 规范、修复代码错误2.4 人工智能技术对话&#xff0c;有求必应2.5 智能代码分析&#xff0c;快速上手历史代码 三、获得的帮助与提升四、建议五…

nvidia系列教程-AGX-Orin系统启动异常解决(eeprom: Failed to read I2C slave device)

目录 前言 一、问题描述 二、问题解决 总结 前言 在使用 NVIDIA Jetson 系列开发板时&#xff0c;可能会遇到启动时的错误提示&#xff0c;例如 eeprom: Failed to read I2C slave device。这个错误通常出现在设备启动日志中&#xff0c;可能会导致设备无法正常启动或功能受限…

vue3 input加一个回车,直接进行查询的事件,然后提示v-on event ‘@pressEnter‘ must be hyphenated.

1、加个回车的事件&#xff0c;直接就有个提示&#xff0c;没有报错 2、v-on事件“pressEnter”必须连字符这个是中文意思&#xff0c;也就是说不要写成个驼峰的形式&#xff0c;要改为-的形式。 3、稍改下&#xff0c;就可以解决&#xff1a; 4、其实不改也没有事的&#xff…

星际牛仔1998年SUNRISE制作的原创电视动画

《星际牛仔》是日本SUNRISE动画公司制作的原创电视动画。于1998年4月3日-1999年4月23日在东京电视台和WOWOW播出&#xff0c;同年夺得第三回神户动画奖的年度最佳电视动画奖&#xff0c;2000年获得日本科幻大会星云奖。 动画剧场版《星际牛仔&#xff1a;天国之扉》2001年9月1…

Vue快速入门(二)——选项式 API介绍

当前 Vue 的最新稳定版本是 v3.4.35&#xff0c;而Vue 2 已于 2023 年 12 月 31 日停止维护。 Vue2的书写风格是选项式 API &#xff0c;而Vue3的书写风格同时支持选项式API和组合式 API。那我们选哪一种风格的API来学习呢&#xff1f;我建议先学习选项式API&#xff0c;然后再…

yolov5更换MobileNetV3的主干网络

目录 1.定义网络 2.将test_MobileNetV3.py上面的代码复制粘贴到如下文件里面 2.1复制需要更改的原来的网络如何改结构 3.更改yolo.py注册网络 1.定义网络 1. 宽度为0.5的mobilenetv2网络的结构图 在主干网络上面可以重新定义成三层&#xff0c;编号从0开始 如图是MobileNet…

如何在不同阶段选择合适的项目管理软件?

作为一个资深的产品经理&#xff0c;我有幸在过去的20多年里&#xff0c;接触过很多不同行业&#xff0c;从互联网行业、软件行业&#xff0c;到金融行业、制造行业&#xff0c;所积累的丰富经验让我对项目管理软件的选择有了更深入的了解和认识。 不同行业的项目管理痛点 每个…

如果要做一个重要的决定, 有什么好的方法可以让我做出正确的选择

做出重要决定时&#xff0c;以下方法可以帮助你做出更正确的选择&#xff1a; 文章目录 1. 收集信息和数据2. 制定明确的目标和标准3. 分析和评估选项4. 考虑长远利益5. 制定备选方案和应急计划6. 寻求意见和建议7. 直觉和情感的平衡8. 制定决策计划并执行 分析和评估选项1. 决…

【JavaEE】初步认识多线程

​ &#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【Java】登神长阶 史诗般的Java成神之路 &#x1f3b7; 一.线程 1.概念 线程&#xff08;Thread&#xff09;是在计算机科学中&#xff0c;特别是操作系统领域里的一个关键概念。它是操作系统能够进…