-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Closed
Description
现状
在使用umi的dynamicImport后,如果组件在挂载时有JS运行时异常,比如在render函数中,这些运行时异常最后会被react-loadable捕获。
导致unhandledrejection事件不能捕获到运行时错误,然而这个事件被很多监控系统用来做JS异常捕获。这就影响到了这些监控系统。
codesandbox例子:https://codesandbox.io/s/awesome-elbakyan-nbdvw?file=/src/pages/index.tsx:347-367
预期行为
希望在使用dynamicImport后,unhandledrejection事件能捕获组件挂载时的JS运行时错误。
原因
- 在umi2中,dynamicImport的实现是依赖于[email protected]版本,从5.4.0之后,该版本中确实存在该问题,catch住了运行时异常。参考链接如下:
- 在umi3中,虽然没有直接引入react-loadable,但是其实现的loadable依旧有该问题存在。参考链接如下:
期望的解决方式
- 在umi2中,建议把react-loadable依赖限制在5.3.1版本。
- 在umi3中,建议在catch后throw error。
可能的疑问
运行时错误是不是在开发环境就能被发现?
在绝大多数情况下确实如此,但是在一些场景中,比如:
一个字符串replaceAll函数,这个函数兼容性很差,我们在本地开发环境中很难发现改函数不可调用的问题,我们就期望一些监控系统能帮助我们发现这个错误。
Metadata
Metadata
Assignees
Labels
No labels