source-map定位生产问题

news2024/11/16 11:42:31

source-map 定位源码错误位置

  1. 需要安装source-map库
  2. webpack配置需要配上devtool: “hidden-source-map”,devtool详细配置看这里devtool配置
  3. 配置完webpack打包后,可以看到打包出来的.js.map文件
    在这里插入图片描述
  4. 将生产包产生错误的栈赋值给stack即可,即设置stack = error.stack,格式见下面例子,可以这样获取,注意是error.stack
window.addEventListener("error", (event) => {
  console.log("%c [ event.error.stack ]-13", "font-size:13px; background:pink; color:#bf2c9f;", event.error.stack)
})
  1. 注意这里说的是生产包产生的错误,不是测试环境,测试环境一般是设置为自动加载source map,也就是直接在浏览器可以点击定位到源码(为防止别人发现我代码写得太烂,线上不建议这样使用)
  2. 主要流程:通过将.js.map读出来,然后通过source-map库的处理该文件,再根据错误栈error.stack做位置匹配,具体匹配流程可以到这里膜拜一下大佬操作source-map
  3. 这里只是一个简单的demo,需要手动复制错误,手动执行文件
/** 通过source-map 定位源码错误位置 */

const fs = require("fs")
const path = require("path")
const { SourceMapConsumer } = require("source-map")

const stack = `
  Error: 手动抛出错误
  at onClick (http://localhost:3000/static/js/main.08fa76b6.js:2:12177)
  at te (http://localhost:3000/static/js/vendor.30784604.js:2:131903)
  at Object.Ie (http://localhost:3000/static/js/vendor.30784604.js:2:596135)
  at De (http://localhost:3000/static/js/vendor.30784604.js:2:596289)
  at http://localhost:3000/static/js/vendor.30784604.js:2:616171
  at Zr (http://localhost:3000/static/js/vendor.30784604.js:2:616265)
  at zr (http://localhost:3000/static/js/vendor.30784604.js:2:616679)
  at http://localhost:3000/static/js/vendor.30784604.js:2:622117
  at cu (http://localhost:3000/static/js/vendor.30784604.js:2:685488)
  at Ae (http://localhost:3000/static/js/vendor.30784604.js:2:595268)
`

function processShowErrorLocation() {
  const dirName = path.resolve(__dirname, "../../dist/static/js")
  const isExit = fs.existsSync(dirName)
  if (!isExit) {
    console.log(
      "%c [ 文件夹路径不存在,是不是没有打包,可执行命令yarn build:prod ]-26",
      "font-size:13px; background:pink; color:#bf2c9f;",
    )
    return
  }
  const files = fs.readdirSync(dirName)
  const regex = /^(?!vendor).*\.js.map$/
  files.forEach((item) => {
    if (!regex.test(item)) {
      return
    }
    const filePath = path.join(dirName, item)
    getSourceCodeLocation(filePath)
  })
}

async function getSourceMapConsumer(filePath) {
  const mapFile = path.resolve(filePath)
  const sourceMapContent = fs.readFileSync(mapFile).toString()
  return await new SourceMapConsumer(sourceMapContent)
}

async function getSourceCodeLocation(filePath) {
  const match = /(\w+\.js):(\d+):(\d+)/.exec(stack)
  const line = parseInt(match[2], 10)
  const column = parseInt(match[3], 10)
  const consumer = await getSourceMapConsumer(filePath)
  const originalPosition = consumer.originalPositionFor({
    line,
    column,
    bias: SourceMapConsumer.GREATEST_LOWER_BOUND,
  })
  originalPosition.mapFilePath = filePath
  if (!originalPosition.source) {
    return
  }

  console.log(originalPosition) // { source: 'test.js', line: 2, column: 0, name: 'sum' }
}

processShowErrorLocation()


在这里插入图片描述
在这里插入图片描述

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

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

相关文章

前端——原生HTML猫猫max桌宠(附源码)

一、前言 看见了max大佬和狗头人大佬做的一个桌宠,于是就像用web简单实现一下 二、代码包 https://wwwf.lanzout.com/iWfER0ze0cqd密码:fg88 三、简单效果 简单用了随机动作(可以进行权重设置) 四、踩坑情况 如果不是主循环loop里&#xff0…

记录--巧用 overflow-scroll 实现丝滑轮播图

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言: 近期我在项目中就接到了一个完成轮播图组件的需求。最开始我也像大家一样,直接选择使用了知名的开源项目 "Swiper",但是后来发现它在移动端项目中某些测试环境…

Go的性能优化建议

前言: \textcolor{Green}{前言:} 前言: 💞这个专栏就专门来记录一下寒假参加的第五期字节跳动训练营 💞从这个专栏里面可以迅速获得Go的知识 Go的性能优化建议 3 性能优化建议3.1 性能优化建议 - Benchmark3.2 性能优化…

一文解答危废行业信息化平台的必要性——哲讯智能科技

危险废物物联网监管系统可以通过物联网技术实现对危险废物的精准管理,不仅有利于提高危险废物管理水平,而且能够有效防范和减少重特大事故的发生,保障人民群众生命财产安全。利用物联网技术,通过传感器、无线网络、移动终端等设备…

linux CentOS 7下载步骤

1、官网地址:https://www.centos.org/download/ 2、 3、下载阿里云 4、下载 或minimal - 2009

08-购物车效果

先做数据,再做功能,最后界面 var goods [{pic: ./assets/g1.png,title: 椰云拿铁,desc: 1人份【年度重磅,一口吞云】√原创椰云topping,绵密轻盈到飞起!原创瑞幸椰云™工艺,使用椰浆代替常规奶盖打造丰盈…

【SAS】【01】【scsi协议族】SCSI standards family

下图显示了SAM协议与SCSI协议族中其他协议标准和相关项目的关系。 SCSI Architecture Model: 定义SCSI系统模型、SCSI标准集的功能划分以及适用于所有SCSI实现和要求。Device-Type Specific Command Sets: 定义特定设备类型的实现标准,包括每种设备类型的设备模型。…

leetcode1884. 鸡蛋掉落-两枚鸡蛋.动态规划-java

鸡蛋掉落-两枚鸡蛋 leetcode1884. 鸡蛋掉落-两枚鸡蛋题目描述解题思路代码演示 动态规划代码演示 动态规划专题 leetcode1884. 鸡蛋掉落-两枚鸡蛋 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/egg-drop-with-2-eggs-a…

基于Python和Spacy的命名实体识别

命名实体识别(Named Entity Recognition,简称NER)是一种自然语言处理(NLP)方法,用于检测和分类文本中的命名实体,包括人物、组织、地点、日期、数量和其他可识别的现实世界实体。 Spacy是一个基…

STM32之HAL库微妙延迟(借助Systick)

代码 void bsp_us_delay(uint32_t us) {uint32_t start, now, delta, reload, us_tick;start SysTick->VAL;reload SysTick->LOAD;us_tick SystemCoreClock / 1000000UL;do {now SysTick->VAL;delta start > now ? start - now : reload start - now;} whi…

Element el-dropdown 事件

我这里是结合el-table一起使用 设置trigger"click" 就可以加点击事件 这里我需要点击下拉选择值后&#xff0c;既要得到下拉里面的值 也要得到这一行数据的值 重要的代码 <el-dropdowntrigger"click"command"handleCommand($event,scope.row,sc…

7 拓展中断_事件控制器(EXTI)

目录 EXTI-扩展中断和事件控制器 事件的概念 EXTI-扩展中断和事件控制器 EXTI外设框图 F1/F4/F7&#xff08;看懂与或门&#xff09; H7 STM32CubeMX中的EXTI配置 EXTI-扩展中断和事件控制器 事件的概念 STM32上许许多多的外设&#xff0c;是通过内部信号来协同工作的。…

VMware麒麟Kylin系统安装Linux

麒麟系统常用链接 https://www.jianshu.com/p/f58e2435b650 ios下载链接 https://eco.kylinos.cn/partners/mirror.html 其实基本上只有两个区别&#xff0c;一个是桌面操作系统和服务器操作系统的区别&#xff0c;一个是x86_64和arm内核的区别&#xff0c;我下的是这个海光版…

Splashtop 荣获2023年教育科技突破奖

2023年6月8日 加利福尼亚州库比蒂诺 Splashtop 在简化随处办公远程解决方案领域处于领先地位&#xff0c;该公司自豪地宣布其在教育科技突破奖评选活动中荣获“年度远程学习解决方案供应商奖”。这项在教育行业久负盛名的奖项特别关注创新性解决方案和创意公司&#xff0c;这些…

BlendOS 3 正在开发:承诺支持九个 Linux 发行版,无存储库更新

导读blendOS 发行版承诺混合 Arch Linux、Fedora Linux 和 Ubuntu&#xff0c;今年 4 月发布的 blendOS 2 使用 WayDroid&#xff0c;承诺运行 Android 应用程序。 开发商 Rudra Saraswat 表示&#xff0c;不可变发行版 blendOS 3 系统正在开发中&#xff0c;并承诺为不可变发行…

Nginx优化及防盗链

目录 一、隐藏版本号 1.查看版本号 2.修改配置文件 3.重启服务及查看版本号 二、修改用户 与组 1.修改配置文件 2.重启服务 三、缓存时间 1.修改配置文件 2.重启服务 3.测试访问 四、日志分割 1.写脚本 2.赋予执行权限并执行 3.验证 4.设置定时任务 五、连接超时 2…

ctfshow文件包含web87-117

1.web87 绕过死亡待可以使用rot13编码,还可以用base64编码,url两次编码&#xff0c;浏览器自动进行解码一次&#xff0c;代码解码一次&#xff0c;如果之编码一次&#xff0c;代码会被浏览器解码一次&#xff0c;这时候特殊字符还是url编码&#xff0c;而如php字符串则被还原&a…

扩增子高通量测序

扩增子测序是指利用合适的通用引物扩增环境中微生物的16S rDNA/18S rDNA /ITS高变区或功能基因&#xff0c;通过高通量测序技术检测PCR产物的序列变异和丰度信息&#xff0c;分析该环境下的微生物群落的多样性和分布规律&#xff0c;以揭示环境样品中微生物的种类、相对丰度、进…

人工智能数据集处理——数据清理2

目录 异常值的检测与处理 一、异常值的检测 1、使用3σ准则检测异常值 定义一个基于3σ准则检测的函数&#xff0c;使用该函数检测文件中的数据&#xff0c;并返回异常值 2、使用箱形图检测异常值 根据data.xlsx文件中的数据&#xff0c;使用boxplot()方法绘制一个箱型图 …

headscale专有网络及其ACL控制

如何使用 Headscale ( Tailscale 开源版 ) 快速搭建一个私有专属的 P2P 内网穿透网络 内网穿透简述 由于国内网络环境问题, 普遍家庭用户宽带都没有分配到公网 IP(我有固定公网 IP, 嘿嘿); 这时候一般我们需要从外部访问家庭网络时就需要通过一些魔法手段, 比如 VPN、远程软…