react-error-overlay-custom
v1.2.0
Published
A modify of react-error-overlay
Downloads
8
Maintainers
Readme
react-error-overlay
react-error-overlay
is an overlay which displays when there is a runtime error.
Development
When developing within this package, make sure you run npm start
(or yarn start
) so that the files are compiled as you work.
This is ran in watch mode by default.
If you would like to build this for production, run npm run build:prod
(or yarn build:prod
).
If you would like to build this one-off for development, you can run NODE_ENV=development npm run build
(or NODE_ENV=development yarn build
).
is a modified version from react-error-overlay
我修改的内容
- 修改了 src/utils/parser.js 中的
const regexExtractLocation = /\(?(.+?)(?::(\d+))?(?::(\d+))?\)?$/;
目的是为了兼容和脚手架不在一个目录时候的错误位置提取。 - 增加了 compileErrorContainer.js 中的一个正则,适配 webpack 的报错
- 增加了 npm run all 把开发和生产都打到 lib 文件中
对应 npm 包 react-error-overlay-custom
执行 build 或 build:prod 后,把 lib 文件拷贝到 npm 项目里
react 组件解读
入口
- 以 index.js 作为入口,引入相关组件,并暴露接口给 webpackHotClient 使用
- 以 iframeScript 作为核心展示 React 组件
整体逻辑
index.js 暴露下面函数
- setEditorHandler 传入触发调用 ide 的函数,这样当解析错误以及定位到的文件位置的时候, 通过点击组件,可以调用特定 url 并附带文件参数,然后这个 url 被服务器的一个中间件捕获, 并调用相关模块打开本地 ide。
- startReportingRuntimeErrors 开始监听实时错误
- dismissBuildError 清空编译错误信息
- reportBuildError 开始处理构建错误
核心点
containers/CompileErrorContainer
处理编译错误
containers/RuntimeErrorContainer
处理实时错误
编译错误解析
src\utils\parseCompileError.js
负责解析编译错误
捕获实时错误
\src\listenToRuntimeErrors.js
捕获实时错误
三种
- 处理抛出的错误。 注册 window.on('error')事件,处理所有错误
- 处理所有 promise 没有正确 reject 错误。 注册 window.on('unhandledrejection')事件,处理所有 promise 没有正确 reject 事件
- 处理所有 react 内部抛出的错误信息,比如组件是 undefined。
console.error 方法,当参数是字符串并且 reactStack 不为空的情况下,执行错误处理。
首先调用
E:\react-error-overlay-custom\src\utils\warnings.js warning
方法处理堆栈,然后调用 listenToRuntimeErrors 下的 getStackFrames 分析处理。
解析实时错误
是否是 react 打印的错误
是 -> 调用src\utils\warnings.js中的warning
函数处理。
如果是 react 自己打印的 error 信息,先调用src\utils\warnings.js中的warning
函数处理。
调用src\utils\getStackFrames.js中的getStackFrames函数
进行堆栈处理。
如果是 react 自己打印的 error 信息,使用 unmapper 函数,否则使用 mapper 函数。
E:\react-error-overlay-custom\src\utils\getStackFrames.js -getStackFrames
如果是 reactconsole 的错误信息,会根据 hotdevclient 设置的 js 文件名称,请求对应 js 文件,然后获取原始文件,
获取 sourcemap 文件,最后生成完整的堆栈信息。
解析错误栈信息,然后调用下面的
\src\utils\parser.js -parseError