首页 » 网站建设 » php中嵌入js报错技巧_soucemapjs Vue 还原生成情形报错让JS报错无所遁形

php中嵌入js报错技巧_soucemapjs Vue 还原生成情形报错让JS报错无所遁形

访客 2024-11-16 0

扫一扫用手机浏览

文章目录 [+]

直到我创造了 source-map-js 这个神奇的包!

这张图是我通过sdk抓取到的js报错,并通过source-map-js error-stack-parser还原出的

php中嵌入js报错技巧_soucemapjs  Vue 还原生成情形报错让JS报错无所遁形

准备事情先创建一个空的vue项目,然后删掉一些没用的东西。
在 App.vue 写入这段代码

export default { name: "App", data() { return { testNumber: 1, } }, created() { this.testNumber = null; if (this.testNumber.length > 1) { console.log("报错了!
"); } }}

启动项目之后掌握台可以看到js的报错,点击下报错的地方我们也能看到详细是哪个位置出错了。

php中嵌入js报错技巧_soucemapjs  Vue 还原生成情形报错让JS报错无所遁形
(图片来自网络侵删)

那么打包上线了是否也能看到报错的位置呢?

tips: 这里我用的phpstudy 搭建的内网环境

emmm翻车了?为啥上线了也能看到?

并没有,支配的时候我把source-map也给放到做事器环境了。

source-map 干啥的呢? 一句话:映射源码

大家在支配项目的时候该当很少会支配source-map吧?虽然能还原报错位置,但放上去了项目体积直线上升!

而且 source-map 也不应该被放到做事器上,这玩意扔上去了你的代码切实其实便是在裸奔,没人乐意自己的代码被”别有用心”的人看到吧?

那么在生产的时候我是怎么还原的js报错呢?

一起还原js缺点吧!
先在main.js中配置下vue的缺点捕获。

Vue.config.errorHandler = (err, vm, info) => { console.log(err,"err"); console.log(vm, "vm"); console.log(info, "info"); }

js报错不在是赤色的了~

引入 error-stack-parser 还原js实行堆栈

import ErrorStackParser from "error-stack-parser"Vue.config.errorHandler = (err, vm, info) => { const parseError = ErrorStackParser.parse(err); console.log(parseError,"err"); console.log(vm, "vm"); console.log(info, "info");}

source-map 登场还原真·js报错位置

这里一定一定要开启source-map,把项目支配到做事器环境!

这里一定一定要开启source-map,把项目支配到做事器环境!

这里一定一定要开启source-map,把项目支配到做事器环境!

须要先安装axios包,用来获取到咱们的source-map文件

import ErrorStackParser from "error-stack-parser"import sourceMap from "source-map-js"import axios from "axios"const LoadSourceMap = (url) => axios.get(url)Vue.config.errorHandler = async (err, vm, info) => { const stackFrame = ErrorStackParser.parse(err); console.log(stackFrame, "缺点堆栈"); findCodeBySourceMap(stackFrame[0]) console.log(vm); console.log(info);}// stackFrame.fileName 便是报错的Js代码,须要根据这个Js 获取到对应的source-mapconst findCodeBySourceMap = async (stackFrame) => { const sourceData = await LoadSourceMap(stackFrame.fileName + ".map") const fileContent = sourceData.data; const consumer = await new sourceMap.SourceMapConsumer(fileContent) // 通过报错位置查找到对应的源文件名称以及报错行数 const lookUpResult = consumer.originalPositionFor({ line: stackFrame.lineNumber, column: stackFrame.columnNumber }) // 那么就可以通过 sourceContentFor 这个方法找到报错的源代码 const code = consumer.sourceContentFor(lookUpResult.source) console.log(code, "还原之后的 code") // return { // code, // line: lookUpResult.line, // 详细的报错行数 // column: lookUpResult.column, // 详细的报错列数 // name: lookUpResult.name // }}…

功能与浸染ErrorStackParser 解析报错信息ErrorStackParser 解析出来的出来的是一个数组,这个数组每一个元素都可以解析出来,这里我为了演示就不去逐一解析了,感兴趣的小伙伴可以自己去考试测验下。
axios 获取到srouce-map文件axios 便是用来获取到咱们的source-map文件的,我不建议你直接将source-map放到做事器,由于”别有用心”的人可以下载你的source-map还原你的代码……这里我是为了 演示 以是放到做事器上,你可以通过input上传获取source-map 内容(下一篇实现)source-map-js 还原源代码srouce-map-js 便是用来还原源代码的。
只要你有source-map文件都能还原!
非常强大!
总结

下一篇文章会带大家用 Koa 实现数据上报,并在前端页面展示出详细的报错位置。

再讲讲如何自建前端监控系统以及这俩月的心途经程……

参考

排名不分先后

srouce-map-js线上bug追踪之Sentry初步考试测验(一)利用SourceMap还原前端代码 这篇文章总觉得是从哪里爬来的,没有找到详细的作者。
noerror README.md 有两篇文章建议大家可以去看看!
标签:

相关文章

银行IT运维,守护金融安全,赋能创新发展

随着金融科技的飞速发展,银行IT运维作为金融行业的重要支撑,其重要性日益凸显。银行IT运维不仅关乎金融安全,更是推动银行业务创新发...

网站建设 2024-12-26 阅读0 评论0

长安IT运营,赋能产业升级,驱动创新发展

在数字化、智能化浪潮的推动下,信息技术(IT)已成为企业转型升级的关键驱动力。长安公司作为我国汽车产业的领军企业,高度重视IT运营...

网站建设 2024-12-26 阅读0 评论0

长春IT商店,智慧之城中的科技新地标

随着互联网技术的飞速发展,我国IT产业取得了举世瞩目的成就。长春,这座充满活力和创新精神的城市,近年来更是涌现出了一批优秀的IT商...

网站建设 2024-12-26 阅读0 评论0

阳江IT行业招聘热潮,机遇与挑战并存

近年来,随着我国经济的快速发展,信息技术(IT)产业逐渐成为推动经济增长的重要引擎。阳江作为沿海城市,积极响应国家战略,大力发展I...

网站建设 2024-12-26 阅读0 评论0