博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线上压缩代码-定位错误
阅读量:6266 次
发布时间:2019-06-22

本文共 1646 字,大约阅读时间需要 5 分钟。

生产环境没有source-map文件,上报的错误都不好定位,这里实现一个简单的错误定位脚本

1、获取压缩代码错误信息(行数、列数、错误信息,错误文件)

这里通过控制台看错误信息

window.addEventListener('error', function (e) {    console.debug('lineno: ', e.lineno, ' colno: ', e.colno)    console.debug('errorMessage:', e.message)    console.debug('errorFile:', e.filename)}, true)复制代码

我们写一段错误的代码(single.vue的片段)

method: {
   test (option) {
        const data = option.test         const dataTest = option.data.test         return data + dataTest     } },  created () {
    // 设置异步错误的原因是,同步的错误会被vue捕获     setTimeout(() => {
        this.test({
          testOption: 1         })     }, 300) } 复制代码

在浏览器中运行,报错结果如下

得到错误信息:

  • 错误行数:1

  • 错误列数:59236

  • 错误信息:cannot read property 'test' of undefined

  • 错误文件:0.0a77f.js

2、定位错误的node脚本

安装依赖source-map

npm install source-map复制代码

node脚本如下(map/index.js)

// 读取文件var fs = require('fs')// souceMap处理文件var SourceMapConsumer = require('source-map').SourceMapConsumer// 启动构建进程(已构建则不需要)var exec = require('child_process').execvar lineno = process.argv[2] || 0   // 第一个参数为行数var columnno = process.argv[3] || 0 // 第二个参数为列数var fileName = process.argv[4] || '' // 第三个参数为错误文件(错误文件名就好) // 构建有map的线上代码// node build onlineMap为构建命令exec('node build onlineMap', function () { // 读取错误文件的map文件 var consumer = new SourceMapConsumer(fs.readFileSync('./dist/' + fileName + '.map', 'utf8'))  // 输出map的错误信息  console.log(consumer.originalPositionFor({    line: +lineno,      // +是为了转化为数字    column: +columnno  }))})复制代码

运行node脚本

node map 1 59236 0.0a77f.js复制代码

效果如下:

结合控制台输出的信息,就可以定位到错误代码了

我们再来看一下,给代码开启source-map,看错误信息是否一致

错误代码的位置定位是准确的,证明可行。

3、后续扩展思路

目前实现的是比较简单的脚本,所以存在一些问题:

  • 需要当前构建内容和线上是一致的
  • 操作比较繁琐

优化思路如下:

后续优化慢慢补充~

参考

转载地址:http://twjpa.baihongyu.com/

你可能感兴趣的文章
Lua
查看>>
Mysql备份系列(3)--innobackupex备份mysql大数据(全量+增量)操作记录
查看>>
postgresql 获取刚刚插入的数据主键id
查看>>
C# Activex开发、打包、签名、发布 C# Activex开发、打包、签名、发布 [转]
查看>>
05-Vue入门系列之Vue实例详解与生命周期
查看>>
验证码展示
查看>>
浅谈大型web系统架构
查看>>
淘宝大秒系统设计详解
查看>>
linux如何修改登录用户密码
查看>>
Kali Linux 2017中Scapy运行bug解决
查看>>
Python监控进程性能数据并画图保存为PDF文档
查看>>
Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法
查看>>
Mac OS 10.10.3下Apache + mod_wsgi配置【一】
查看>>
Hibernate基于注解的双向one-to-many映射关系的实现
查看>>
算法竞赛入门经典 例题 3-2 蛇形填数
查看>>
remove-duplicates-from-sorted-list I&II——去除链表中重复项
查看>>
c++ 网络库
查看>>
Linux 格式化扩展分区(Extended)
查看>>
linux echo命令
查看>>
nginx 内置变量大全(转)
查看>>