Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

目前前端使用webpack构建的很多, rollup也有一些, 这些是怎么做切面探测的? #20

Open
xingyuzhe opened this issue Sep 19, 2016 · 6 comments

Comments

@xingyuzhe
Copy link

xingyuzhe commented Sep 19, 2016

目前前端使用webpack构建的很多, rollup也有一些, 这些是怎么做切面探测的?我看代码里没有关于这部分的处理

@xingyuzhe xingyuzhe changed the title 目前使用webpack构建的比较多, rollup也有一些, 这些是怎么做切面探测的? 目前前端使用webpack构建的很多, rollup也有一些, 这些是怎么做切面探测的? Sep 19, 2016
@caihuiji
Copy link
Member

晚点支持。 我们研究一下

@caihuiji
Copy link
Member

caihuiji commented Feb 5, 2017

目前webpack 没有办法做到try-catch ,因为已经打包成一个文件了。
如果webpack 使用了 CommonsChunkPlugin 插件,在加载 common.js 后插入如下代码

//通过 spyCustom 重写 webpack 的 wepackJsonp ,详细可以看看生成common.js 源码里面的原理
BJ_REPORT.spyCustom(webpackJsonp)

rollup 也是同样的原理。目前只打包一个文件,没有办法重写。

但是你可以使用 #3 中的第一种方式开启 响应头增加 access-control-allow-orgin (以下简称AC)

@miniflycn
Copy link
Member

写 plugin 吧,并不是没有办法

@q946401639
Copy link

话说现在支持webpack了吗

@loskael
Copy link
Member

loskael commented May 10, 2018

@q946401639
try catch 并不是必须的,建议在服务器端设置 CORS 支持捕获跨域的异常

@Marszed
Copy link

Marszed commented Dec 11, 2018

// VUE 中的处理方式
Vue.config.errorHandler = (err, vm, info) => {
  const {
    message, // 异常信息
    name, // 异常名称
    script,  // 异常脚本url
    line,  // 异常行号
    column,  // 异常列号
    stack,  // 异常堆栈信息
  } = err
  console.log('===========源错误信息==========')
  console.log('message', message)
  console.log('name', name)
  console.log('script', script) // undefined
  console.log('line', line) // undefinedi
  console.log('column', column) // undefined
  console.log('stack', typeof stack, stack)
  console.log('vm===>')
  console.log(vm)
  console.log('info===>')
  console.log(info)
  console.log('===========开始正则匹配定位具体错误信息==========')
  const analysisReg = /at\s+(.*)\s+\((.*):(\d*):(\d*)\)/i.exec(stack)
  console.log(analysisReg)
  console.log('解析出的源文件地址-script', analysisReg[0].match(/\((\S*)\)/)[1].split('?')[0])
  console.log('解析出的行-line', analysisReg[3])
  console.log('解析出的列-column', analysisReg[4])
}

// React 中的处理方式 16.x
class demo extends React.Component {
  constructor(props) {
    super(props);
  }
  componentDidCatch(error, info) {
  const {
    message, // 异常信息
    name, // 异常名称
    script,  // 异常脚本url
    line,  // 异常行号
    column,  // 异常列号
    stack,  // 异常堆栈信息
  } = err
  console.log('===========源错误信息==========')
  console.log('message', message)
  console.log('name', name)
  console.log('script', script) // undefined
  console.log('line', line) // undefinedi
  console.log('column', column) // undefined
  console.log('stack', typeof stack, stack)
  console.log('===========开始正则匹配定位具体错误信息==========')
  const analysisReg = /at\s+(.*)\s+\((.*):(\d*):(\d*)\)/i.exec(stack)
  console.log(analysisReg)
  console.log('解析出的源文件地址-script', analysisReg[0].match(/\((\S*)\)/)[1].split('?')[0])
  console.log('解析出的行-line', analysisReg[3])
  console.log('解析出的列-column', analysisReg[4])
  }
}

结合第三方库source-map(npm)+构建sourceMap+构建出的chunk js(不带凭据(credential)启用跨域加载)+badeJs手动上报(或者fork源代码做修改)即可还原源代码的错误行数列数信息

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants